首页 > 解决方案 > 研究什么来解决这类问题?

问题描述

我通过反复试验解决了以下问题,但仍然没有正确理解我是如何做到的。

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

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

创建两个函数 car 和 cdr ,它们每个都会返回一个参数。

car(pair); // 5

cdr(pair); // 3

我查看了函数组合和柯里化,但没有发现任何与此相似的。我应该学习什么才能更好地理解这个主题?

编辑:(解决方案)

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

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

标签: javascriptfunctional-programming

解决方案


您可以再使用两个返回特殊参数的函数,例如leftandright和两个想要的函数,用于car返回cdr闭包的调用。

一个标准的方法是看,你有什么

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

以及你想得到什么

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

然后你需要两个函数来获取or 或 y,它接管了andx的闭包。consxy

最后的决定是使用该函数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


推荐阅读