iterate :: (a -> a) -> a -> [a]
(正如你可能知道的那樣)iterate
是一個函數,它具有函數和起始值。然後它將函數應用於起始值,然後將相同的函數應用於最後的結果,依此類推。你將如何(重新)在Haskell中實現迭代?
Prelude> take 5 $ iterate (^2) 2
[2,4,16,256,65536]
Prelude>
結果是一個無限列表。 (這就是爲什麼我使用take
)。 我的問題你將如何在Haskell中實現自己的iterate'
函數,僅使用基礎知識((:)
(++)
lambdas,模式mataching,警衛等)?
(Haskell的初學者在這裏)
感謝您的反饋。 – 2010-09-22 14:09:09
這看起來像是「修復」定義「修復f = f(修復f)」的變體,類似於...「iterate f(fa)」,您可以使用修復來定義迭代: 「iterate fa = fix( \ rx - > x:r(fx))a「不是說它更好,只是認爲id說:) – QuantumKarl 2015-08-21 11:42:38