ale*_*sch 2 lambda haskell loops
当我把以下lambda表达式放入ghci我得到1:
ghci> (\x -> x+1) 0
1
Run Code Online (Sandbox Code Playgroud)
但是,当我使用该功能时,iterate我得到了
ghci> take 10 (iterate (\x -> x+1) 0)
[0,1,2,3,4,5,6,7,8,9]
Run Code Online (Sandbox Code Playgroud)
我希望得到一个等于的列表[1..10].为什么不?
更具体地说,迭代是这样实现的:
iterate f v = v : iterate f (f v)
Run Code Online (Sandbox Code Playgroud)
请记住,您给迭代的起始值将首先出现在列表中 - 就是这样.
停止...... 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:Run Code Online (Sandbox Code Playgroud)iterate f x == [x, f x, f (f x), ...]
你去吧 它的工作原理是因为它就是它的工作方式.我并不想轻浮,只是希望能够说明Hoogle和文档的有用性.(听起来像Haskell乐队的一个好名字:"Hoogle和Docs")