Stream

map on a stream

-- 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)