从链接的递归函数返回函数时是否可以添加值?

时间:2016-12-28 08:28:15

标签: javascript functional-programming ecmascript-6 currying

我试图创建一个递归函数来添加数字值并返回自身。这是我到目前为止所拥有的。

const recursivo = (...v) => v ? v.reduce((a,e) => a + e, 0) + recursivo : 0;

典型的测试用例可能看起来像recursivo(1,2,3)(4,5)(6)recursivo(100)recursivo(12,34,56)

该函数被破坏,因为它返回一个数值和函数,但它不会在下一个参数集上被调用。 (有道理)

是否可以为可能在链式参数集上调用的函数添加值?例如以下内容:

const recursivo = (x,...v) => v ? recursivo(x + v.reduce((a,e) => a + e, 0),"?") : x;

这也不起作用,因为语法不正确,虽然逗号之后的问号只是一个占位符,因为我不确定正确的语法是什么样的;它是链中下一个论点的代表。

如果它实际上是可能的,我怎么能写一个递归函数,它接受一个总和并继续在任意数量的链式参数上调用自己,向下一个参数添加一个数字它会自称吗? (不一定必须使用ES6语法)

编辑:这不是链接的SO帖子的重复,尽管它是相关的。该帖子没有解决处理可能包含多个参数的参数集的问题,该帖子中提出的解决方案也没有解决这个问题。

换句话说,该帖子中提到的解决方案适用于recursivo(1)(2)(3)等输入,但,如recursivo(1)(2,3,5)(4,5,7,8,24,156)

最终编辑:终于找到了一个可行的解决方案,发布在下面:

function curryo(...v){
    let sum = 0;
    const fn = (...x) => (sum += x.reduce((a,e) => a + e, 0), fn);
    fn.valueOf = _ => sum;
    return fn(...v);
}

更改了与 currying 相关的函数名称,而不是递归。已移除recursion代码并添加了currying代码。

0 个答案:

没有答案