让我们看看:(foldr - 0 '(1 2 3 4))
.
这里是字面意思'(1 2 3 4)
构造一个列表,其元素为数字 1、2、3 和 4。让我们明确地构造列表:
(cons 1 (cons 2 (cons 3 (cons 4 empty))))
一个人能想到foldr
作为替换的函数cons
有一个函数f
并带有值的空v
.
所以
(foldr f 0 (cons 1 (cons 2 (cons 3 (cons 4 empty)))))
becomes
(f 1 (f 2 (f 3 (f 4 v)))))
如果函数 f 是-
和价值v
为0,你将得到:
(- 1 (- 2 (- 3 (- 4 0)))))
我们可以计算出结果:
(- 1 (- 2 (- 3 (- 4 0))))
= (- 1 (- 2 (- 3 4)))
= (- 1 (- 2 -1))
= (- 1 3)
= -2
注意(foldr cons empty a-list)
产生一个副本a-list
.
功能foldl
另一方面使用另一侧的值:
> (foldl cons empty '(1 2 3 4))
'(4 3 2 1)
换句话说:
(foldl f v '(1 2 3 4))
becomes
(f 4 (f 3 (f 2 (f 1 v)))).
If f
是函数-
且值为0,则可得:
(- 4 (- 3 (- 2 (- 1 0))))
= (- 4 (- 3 (- 2 1)))
= (- 4 (- 3 1))
= (- 4 2)
= 2
注意(foldl cons empty a-list)
产生相反的结果a-list
.