JavaScript函数计算器

时间:2019-09-14 06:19:41

标签: javascript functional-programming

我最近在一次采访中遇到了一个问题,该问题使用JavaScript中的函数实现计算器,如下所示:

five(plus(one()));     //returns 6
seven(minus(one())); // returns 6

我将如何实施?

1 个答案:

答案 0 :(得分:4)

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

您还可以创建函数setOperator,在其中可以为两个数字(xy)提供运算符,然后在调用数字函数的结果中调用该函数。运算符函数接受y,然后返回一个新函数,该函数接受x。通过使用函数(例如:five(plus(one())))可以看到,one()首先提供给运算符,然后在调用我们的 foo 5 >函数,因此,我们需要先接受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