unfold

なるほど,unfold ってこういうふうに使えるのか。

cf. ZOETROPEの日記 - Foundations of F#を読む(3)

Haskellでやってみる。

 *Main> take 10 $ Data.List.unfoldr (\(n0,n1) -> Just (n0, (n1, n0+n1))) (1, 1)
 [1,1,2,3,5,8,13,21,34,55]
 

unfoldr に与える関数は b -> Maybe (a, b) 型で,Nothing が返ると終端になるらしい。だから上の例では無限リストになって,最初の10個だけ取り出している。