[英]Haskell - What does `scanl` do in this expression
Haskell 和函数式编程的新手
在 Haskell (ghci) 中, scanl 在以下表达式中做了什么?
scanl (+) 0 [1,3..]
scanl (*) 1 [1..]
起初我认为它会生成一个无限的奇数列表,然后将它们连续添加,但这听起来不对。 这两个表达式有什么作用?
谢谢
scanl
就像foldl
一样,除了它给你一个中间结果列表,而不是最后一个。 理解它有助于理解foldl
,反之亦然。 因此,例如,虽然foldl (+) 0
查找列表中所有元素的总和,但scanl (+) 0
显示导致它的所有中间总和:
ghci> scanl (+) 0 [1,1,1,2,5]
[0, 1, 2, 3, 5, 10]
-- +1 +1 +1 +2 +5
类似地,由于foldl (++) ""
连接了一堆stirngs,所以 scanl scanl (++) ""
显示了中间连接:
ghci> scanl (++) "" ["foo", "bar", "baz", "quux"]
["", "foo", "foobar", "foobarbaz", "foobarbazquux"]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.