繁体   English   中英

Haskell - `scanl` 在这个表达式中做了什么

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM