当我将下面的lambda表达式放入ghci中时,我得到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]相等的列表。为什么不行?
发布于 2011-09-09 20:42:32
iterate的第一个结果是没有应用函数的原始输入,即函数被调用0次。这就是为什么结果与您的预期相差一倍的原因。
发布于 2011-09-09 20:50:53
更具体地说,iterate是这样实现的:
iterate f v = v : iterate f (f v)只需记住,你给iterate的起始值将出现在列表的第一位--就是这样。
发布于 2011-09-10 02:24:08
Stop...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向x返回重复应用f的无限列表:
迭代f x == x,f x,f (f x),...
这就对了。它是这样工作的,因为它说它是这样工作的。我不是想轻率行事,只是希望说明Hoogle和文档的用处。(听起来像是Haskell乐队的好名字:“胡格尔和文档”)
https://stackoverflow.com/questions/7361765
复制相似问题