当我在ghci
中放入以下lambda表达式时,我得到1
:
ghci> (\x -> x+1) 0
1
但是当我使用iterate
函数时,我得到了
ghci> take 10 (iterate (\x -> x+1) 0)
[0,1,2,3,4,5,6,7,8,9]
我希望得到一个等于[1..10]
的列表。为什么不呢?
答案 0 :(得分:10)
迭代的第一个结果是没有应用函数的原始输入,即函数被调用0次。这就是为什么结果与你期望的结果有关。
答案 1 :(得分:7)
更具体地说,实现了迭代:
iterate f v = v : iterate f (f v)
请记住,你给迭代的起始值将首先出现在列表中 - 就是它。
答案 2 :(得分:5)
停止...... Hoogle时间!
http://haskell.org/hoogle/?hoogle=iterate
点击iterate
http://hackage.haskell.org/packages/archive/base/latest/doc/html/Prelude.html#v:iterate
iterate f x
会返回f
到x
重复申请的无限列表:iterate f x == [x, f x, f (f x), ...]
你去吧。它的工作原理是因为它就是它的工作方式。我并不想轻浮,只是希望能够说明Hoogle和文档的有用性。 (听起来像Haskell乐队的一个好名字:“Hoogle和Docs”)