javascript - 有没有办法在 Javascript 中进行可变递归柯里化(Currying)?

标签 javascript recursion functional-programming currying

我知道可能没有任何理由使用它来代替其他创建可变参数函数的方法,但是在语义上是否可以定义一些东西来做到这一点?例如,它可以像 sum(1)(2)(3)(); 这样调用。我试图用下面的代码来实现它:

function sum(x) {
    return function(y) {
        if (!y) return 0;
        else return x + sum(y);
    };
}

但是,当调用它时会出现 TypeError: string is not a function。什么会导致它返回一个字符串?当我更仔细地检查它时,它看起来像是将函数的代码作为字符串返回,这对我来说毫无意义。也就是说,我对复杂的 JavaScript 的语义并不十分熟悉,因此我可能会遗漏其中的一些重要概念。

最佳答案

如评论中所述,x 是一个数字,sum(y) 是一个函数。在它们上使用 + 运算符使用它们的 gcd 类型,它们是字符串,无法调用。

你不能在 javascript 中使用 curry 运算符。您需要显式返回一个柯里化(Currying)函数,并告诉它何时计算值。对我们的功能的适当修复是

function sum(x) {
    return function(y) {
        if (!y) return x;
//                     ^
        else return sum(x + y);
//                      ^^^
    };
}

关于javascript - 有没有办法在 Javascript 中进行可变递归柯里化(Currying)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29454470/

相关文章:

javascript - lodash:如何压缩具有值的对象数组

php - 替换文字星号 (*) ... 但仅在括​​号内

ios - Swift:过滤嵌套数组

functional-programming - 静态 "extend"是一种没有间接麻烦的记录数据类型

javascript - Rxjs - 重置 distinctuntilchanged

javascript - 如何在 JavaScript 函数中使用 Angular 变量作为参数

javascript - 垂直滚动多个 div

Ruby 递归算法问题

algorithm - 你如何检查一个数组是否是另一个数组的子序列?

r - 批量为变量分配名称时,R Functionals不起作用