-- define a stream ones
ones = 1 : ones
--- ones = [1,1,1,1,...]
-- applying map to the stream
twos = map (+1) ones
>take 5 twos
[2,2,2,2,2]
--- twos = [2,2,2,2,...]
stream 上で何の問題もなく map が適用できました。
次に naturals = [1,2,3,4,....] という stream を再帰的に定義してみます。
zeros = 0 : zeros 1 : naturals = zipWith (+) (1 : zeros) naturals >take 5 naturals [1,2,3,4,5]
フィボナッチ数列 [2,3,5,8,...] の定義は
fib = zipWith (+) (1:fib) (1:1:fib)