您能否逐步向我解释第二条指令的结果?
我知道 foldr 在这种情况下是如何工作的:
foldr (*) 1 [-3..-1]
-6
但我不知道如何处理 foldr 表达式中的函数 (\yz -> y*3 + z)。
foldr (\y z -> y*3 + z) 0 [1..4]
30
您能否逐步向我解释第二条指令的结果?
我知道 foldr 在这种情况下是如何工作的:
foldr (*) 1 [-3..-1]
-6
但我不知道如何处理 foldr 表达式中的函数 (\yz -> y*3 + z)。
foldr (\y z -> y*3 + z) 0 [1..4]
30
我们来看看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