JavaScript 函数计算器

tur*_*sap 0 javascript functional-programming

最近在面试中遇到一个问题,用JavaScript中的函数实现一个计算器,如下:

five(plus(one()));     //returns 6
seven(minus(one())); // returns 6
Run Code Online (Sandbox Code Playgroud)

我将如何实施它?

Nic*_*ons 5

一种方法可能是创建一个函数,getNumber(x)该函数将返回一个函数(称为foo)。Foo接受一个运算符函数作为输入并将运算符函数应用于x. 但是,在您的示例中,并不总是给出数字的运算符函数(例如:)one(),因此,如果是这种情况,运算符函数将默认为标识函数,它将返回数字x(例如:one()需要return 1) 如果未提供运算符。

您还可以创建一个函数setOperator,您可以在其中提供两个数字 (xy)的运算符函数,然后在调用数字函数的结果时调用该函数。运算符函数接收y,然后返回一个新函数,该函数接收x。你可以通过你的函数的用法见(如:five(plus(one()))one()提供给运营商,然后再5调用我们在供应foo的功能,因此,我们需要接受y,然后再x

请参阅下面的示例:

const getNumber = x => (f = x => x) => f(x);
const setOperator = f => y => x => f(x, y);

const five = getNumber(5);
const one = getNumber(1);
const seven = getNumber(7);

const plus = setOperator((x, y) => x+y);
const minus = setOperator((x, y) => x-y);

console.log(five(plus(one()))); // 6
console.log(seven(minus(one()))); // 6
Run Code Online (Sandbox Code Playgroud)

  • 非常好,但我将 `getNumber` 定义为 `f ?f(x) : x`,否则 `seven(mul(zero()))` 将被破坏。 (2认同)