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)]
おっと... また結合を読み誤った...。なんかピンと来ないが、ちゃんと結合順序を期待通りにすれば期待する結果になった。