【发布时间】:2017-02-02 22:35:02
【问题描述】:
作为编程挑战的一部分,我们的任务是创建一个具有不确定数量的连续调用的函数。例如,假设函数只返回所提供参数的总和,它应该如下工作:
sum(4)() // 4
sum(4)(5)() // 9
sum(4)(5)(9)() // 18
sum(4)(5)(9)(1)() // 19
// etc...
通过最后允许的空函数调用作为调用结束的指示来简化问题。
我已经研究了一个解决方案,它可以完成这项工作,但在函数本身内部使用全局变量:
var sum = function (a) {
if (!sum.init) {
sum.total = 0;
sum.init = true;
}
if (!arguments.length) {
sum.init = false;
return sum.total;
}
sum.total += a;
return sum;
};
此解决方案有效,但使用了不理想的状态、全局变量和函数对象技巧。我的问题是,是否有办法以纯递归的方式解决问题。
附带说明,如果没有提供最后一个空调用 (),我认为问题无法解决,但如果我错了,请告诉我。
更新
CodeReview 已经回答了这个问题:https://codereview.stackexchange.com/a/153999/129579
一种不依赖全局范围且纯粹是功能性的解决方案。
【问题讨论】:
-
这看起来像是属于 codereview 的
-
可能值得包含链接:codereview.stackexchange.com
-
你研究过柯里化吗?
-
谢谢大家,我会在codereview中发布。
-
epascarello,我做到了,但我不知道函数柯里化如何解决这个问题,也许是一个线索?
标签: javascript functional-programming