2016-04-15 45 views
0
Data.List.iterate

表達iterate (1+) 1計算結果爲[1, 2, 3, ...]如何使用的元組

我可以這樣做iterate ((1+) (1+)) (1, 1),所以我可以[(1, 1), (2, 2), ... ]?如果是,那麼語法是什麼?

回答

4

這句法應該很好地工作:

iterate (\(x,y) -> (x+1, y+1)) (1, 1) 

也有許多其他方法對皮膚這隻貓:

iterate (bimap (1+) (1+)) (1, 1) 
iterate ((1+) *** (1+)) (1, 1) 
map (\x -> (x,x)) $ iterate (1+) 1 
join (,) <$> iterate (1+) 1 
[(x, x) | x <- [1..]] 

...等等。

+0

謝謝:)這正是我一直在尋找 –

0

在Daniel Wagner的答案上展開 - Data.Listiterate將函數作爲第一個參數。的iterate類型簽名是

(a -> a) -> a -> [a] 

這意味着在第一個參數的函數只是有它攝取返回相同的類型。這可以是一個匿名函數,如Daniel的答案或函數名稱所示。例如;他的例子可以使用像這樣命名的函數來重寫:

import Data.List (iterate) 

addOne (x, y) = (x + 1, y + 1) 
iterate addOne (1, 1)