要研究什么才能解决这类问题?

时间:2018-08-16 06:21:05

标签: javascript functional-programming

我通过反复试验解决了以下问题,但对我的操作方式仍然没有足够的了解。

有一个功能缺点: const cons = (x, y) => f => f(x, y);

将值存储在变量对中: const pair = cons(5, 3);

创建两个函数car和cdr,它们每个都将返回各自的参数。

car(pair); // 5

cdr(pair); // 3

我查看了函数的组成和currying,但没有发现与此相似的地方。为了更好地理解该主题,我应该学习什么?

编辑: (解决方案)

const car = pair => pair((x, y) => x);

const cdr = pair =>pair((x,y) => y);

1 个答案:

答案 0 :(得分:2)

您可以再选择两个函数,它们返回一个特殊的参数,例如leftright,而另外两个函数carcdr则返回参数的调用。关闭。

一种标准的方法是看自己拥有的东西

cons = (x, y) => f => f(x, y)

以及您想要获得的东西

car(pair) // --> x
cdr(pair) // --> y

然后,您需要两个函数来获取x或y,这需要在consx上使用闭包y

最终决定是使用函数carcdr进行闭包,闭包将返回一个函数,该函数需要函数f进行调用。

结果是xy的值。

const
    cons = (x, y) => f => f(x, y),
    left = (l, r) => l,
    right = (l, r) => r,
    car = fn => fn(left),
    cdr = fn => fn(right),
    pair = cons(5, 3);

console.log(car(pair)); // 5
console.log(cdr(pair)); // 3