【发布时间】:2017-06-21 19:57:36
【问题描述】:
当我们折叠一个包含一个或多个元素的列表时,如下所示:
foldr (+) 0 [1,2,3]
我们得到:
foldr (+) 0 (1 : 2 : 3 : [])
foldr (+) 1 + (2 +(3 + 0)) // 6
现在当列表为空时:
foldr (+) 0 []
结果:foldr (+) 0 ([])
由于 (+) 是二元运算符,它需要两个参数来完成,但这里我们最终得到 (+) 0。如何导致部分应用函数为0而不抛出错误。
【问题讨论】:
-
(+0)与foldr (+) 0 []不同 -
您可以将
foldr f z xs视为将xs中的所有:替换为f并将[](如果存在)替换为z。所以foldr (+) 0 []用0替换了[],并且没有:可以替换,所以+永远不会被使用。