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要素しか要求せず、そこで止まります。遅延評価のおかげで、消費量を何か有限なものが制限している限り、無限リストは問題になりません。