Namara

毎日コード。手助けなし。

2026-08-20

Infinite.hs

main :: IO ()
main = do
  let nats = [0..]
  let pairs = zip nats "ab"
  print pairs

natsは無限リストです。このコードは終了するでしょうか?また、何を出力するでしょうか?

答え

はい、終了します:[(0,'a'),(1,'b')]zipはどちらか一方のリストが尽きた時点で止まります — "ab"は要素が2つしかないので、zipは無限リストであるnatsの先頭2要素しか要求せず、そこで止まります。遅延評価のおかげで、消費量を何か有限なものが制限している限り、無限リストは問題になりません。