Функция карри в Typescript - PullRequest
       11

Функция карри в Typescript

0 голосов
/ 03 ноября 2018

Я пишу простую машинописную программу, которая принимает два аргумента, x и y, и передаю эти аргументы в Math.pow (x, y).

Поскольку я хочу написать карри-функцию, которая использует Math.pow (), я попытался:

function power(x:number,y:number):number {
   return Math.pow(x,y);
}

Но некоторые люди написали это как:

function mathPow(x : number) : number => (number=>number) {

    (y : number) => Math.pow(x,y)
}

Мне было интересно, считается ли моя попытка, первая из приведенных выше, карри, так как это было самое простое, что я мог придумать. Или вторая версия лучше всего карри?

- Обновление

function pow(x:number):number {
  return function(y:number) {
    return Math.pow(x,y);
  }
}

1 Ответ

0 голосов
/ 29 марта 2019

Вы можете преобразовать любую функцию с двумя аргументами в ее «версию карри», используя эту пользовательскую функцию карри:

 function curry<T1, T2, T3>(fn: (a: T1, b: T2) => T3) {
      return (a: T1) => (b: T2) => fn(a, b);
 }

Тогда вы можете назвать это так:

    const curriedPower = curry(power);
    const fistArgPowerCall= curriedPower(5);
    const powerCallResult = fistArgPowerCall(5);

Вы также можете расширить его для обработки 3 аргументов:

function curry<T1, T2, T3, T4>(fn: (a: T1, b: T3, c: T2) => T4) {
     return (b: T3) => (c: T2) => (a: T1) => fn(a, b, c);
}

и так далее и тому подобное ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...