foldr结果 - Haskell

时间:2013-01-13 13:09:36

标签: haskell

你能一步一步地向我解释第二条指令的结果吗?

我知道折叠器在这种情况下是如何工作的:

foldr (*) 1 [-3..-1]
-6

但我不知道如何在foldr表达式中处理函数(\ y z - > y * 3 + z)。

foldr (\y z -> y*3 + z) 0 [1..4]
30

1 个答案:

答案 0 :(得分:4)

让我们看一下foldr的定义:

foldr f z []     = z 
foldr f z (x:xs) = f x (foldr f z xs) 

现在,在你的例子中,

f y z = y*3 + z

所以,只需使用定义:

foldr f 0 [1..4] = 
f 1 (foldr f 0 [2..4]) =
f 1 (f 2 (foldr f 0 [3,4])) =
f 1 (f 2 (f 3 (foldr f 0 [4]))) =
f 1 (f 2 (f 3 (f 4 (foldr f 0 [])))) =
f 1 (f 2 (f 3 (f 4 0))) =
f 1 (f 2 (f 3 12))) = 
f 1 (f 2 21) =
f 1 27 =
30