tur*_*sap 0 javascript functional-programming
最近在面试中遇到一个问题,用JavaScript中的函数实现一个计算器,如下:
five(plus(one())); //returns 6
seven(minus(one())); // returns 6
Run Code Online (Sandbox Code Playgroud)
我将如何实施它?
一种方法可能是创建一个函数,getNumber(x)
该函数将返回一个函数(称为foo)。Foo接受一个运算符函数作为输入并将运算符函数应用于x
. 但是,在您的示例中,并不总是给出数字的运算符函数(例如:)one()
,因此,如果是这种情况,运算符函数将默认为标识函数,它将返回数字x
(例如:one()
需要return 1
) 如果未提供运算符。
您还可以创建一个函数setOperator
,您可以在其中提供两个数字 (x
和y
)的运算符函数,然后在调用数字函数的结果时调用该函数。运算符函数接收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)