らんだむな記憶

blogというものを体験してみようか!的なー

はぢめてのHaskell(7)

Starting Out - Learn You a Haskell for Great Good!

ghci> zip [1..] ["apple", "orange", "cherry", "mango"]
[(1,"apple"),(2,"orange"),(3,"cherry"),(4,"mango")]

ふむ。

Prelude> zip [1..3] [2..5]
[(1,2),(2,3),(3,4)]

確かにっ!!
では、

Prelude> zip [1..] [2..]

これは無事死亡。遅延評価なので実質何も起こらないのかな?と思ったが、ghci が即時に評価結果を出そうとしてくるので、流石に lazy な haskell さんでも、延々の馬車馬のように走らされると。そして、Ctrl + C しか(´Д`;;;

なら、有限な部分を抽出する関数をかませばいいはず。

Prelude> head zip [1..] [2..]

<interactive>:22:6:
    Couldn't match expected type `[[t1] -> [t2] -> t0]'
                with actual type `[a0] -> [b0] -> [(a0, b0)]'
    In the first argument of `head', namely `zip'
    In the expression: head zip [1 .. ] [2 .. ]
    In an equation for `it': it = head zip [1 .. ] [2 .. ]
Prelude> head (zip [1..] [2..])
(1,2)
Prelude> take 3 (zip [1..] [2..])
[(1,2),(2,3),(3,4)]

おっと... また結合を読み誤った...。なんかピンと来ないが、ちゃんと結合順序を期待通りにすれば期待する結果になった。