在Haskell

时间:2018-02-12 22:43:16

标签: haskell

我对foldr和foldl的工作原理感到困惑。比如在列表[1,2,3]

上使用这样的例子
foldr (+) 0 => 1 : (2 :(3:([])) 
             => 1 + (2 +(3+0)) = 6

这是有道理的,因为每个:被+号和空集取代为0.

但是当我在ghci中输入以下两行时,我得到了:

foldr div 7 [13,6,19]   -- gives me 4 
foldl div 7 [13,6,19]   -- gives me 0

我以为我会得到一个列表,其中每个元素除以7,但我得到一个元素。 有人可以告诉我ghci如何计算这个。

1 个答案:

答案 0 :(得分:6)

foldr看起来像这样:

foldr f z [x1, x2, ..., xn] == x1 `f` (x2 `f` ... (xn `f` z)...)

所以在你的情况下:

foldr div 7 [13, 6, 19] == 13 `div` (6 `div` (19 `div` 7))

你可以在Hoogle上查看这样的内容!如果您想要一个包含所有数字除以7的列表,请使用map