<!-- first -->
<script>
var total = 0;
var newAccumulator = function()
{
return function(i) { total += i; };
}
var foldl = function(arr, putNum)
{
for (var i = 0; i < arr.length; ++i)
{
putNum(arr[i]);
}
}
foldl([1, 2, 3, 4], newAccumulator());
document.write("Sum: " + total + "<br/>");
</script>
<!-- second -->
<script>
var total = 0;
var newAccumulator = function(i)
{
total += i;
}
var foldl = function(arr, putNum)
{
for (var i = 0; i < arr.length; ++i)
{
putNum(arr[i]);
}
}
foldl([1, 2, 3, 4], newAccumulator());
document.write("Sum: " + total + "<br/>");
</script>
答案 0 :(得分:3)
它认为你想要
foldl([1, 2, 3, 4], newAccumulator);
在第二个电话中
答案 1 :(得分:2)
您正在fold1函数中执行newAccumulator。传入newAccumulator而不是newAccumulator();
旧
foldl([1, 2, 3, 4], newAccumulator());
新
foldl([1, 2, 3, 4], newAccumulator);
答案 2 :(得分:2)
在致电foldl
时,您拨打newAccumulator
功能:
foldl([1, 2, 3, 4], newAccumulator());
在第一种情况下,它返回一个执行求和的函数:
return function(i) { total += i; };
在第二种情况下,对newAccumulator
的调用不会返回任何内容,因此foldl
没有可以调用来计算总和的函数。
你应该将newAccummulator直接传递给foldl
,而不是它(不会)返回的值:
foldl([1, 2, 3, 4], newAccumulator);
答案 3 :(得分:1)
第二个不起作用,因为你没有传递foldl函数。
在第一个示例中,执行newAccumulator,newAccumulator返回一个函数,该函数传递给foldl ... Foldl使用该函数对数字求和。
在第二个示例中,执行newAccumulator并传递结果,但newAccumulator的结果不是函数。
此外,您命名为foldl的函数通常称为“foreach”。如果将结果存储在数组中,则可能将其称为“map”。 Foldl通常会通过将一个函数添加到总数并返回新的总数来累积总数。