2011-09-09 23 views
2

當我把在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]列表。爲什麼不?

+8

haddock的好處之一是每個函數旁都有一個源代碼鏈接。如果您想知道特定功能的工作原理,請在Hoogle上查找並點擊源鏈接。英戈在下面給出了正確的答案。 –

回答

10

迭代的第一個結果是沒有應用函數的原始輸入,即該函數被調用0次。這就是爲什麼結果與你所期望的相反。

7

更具體地說,迭代實現這個謊言:

iterate f v = v : iterate f (f v) 

只要記住,你給迭代起始值將首先出現的thelist - 僅此而已。

5

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返回f反覆應用到x無限列表:

iterate f x == [x, f x, f (f x), ...] 

你走了。它以這種方式工作,因爲它就是這麼說的。我並非試圖輕視,只是希望說明Hoogle和文檔的用處。 (聽起來像是一個Haskell樂隊的好名字:「Hoogle and the Docs」)

相關問題