以下があるとしましょう。
l = map f (map g [1..100])
そして、私たちはやりたいです:
head l
したがって、次のようになります。
head (map f (map g [1..100]))
ここで、この最初の要素を取得する必要があります。map
次のように定義されています。
map f l = f (head l) : (map f (tail l))
したがって、次のようになります。
f (head (map g [1..100]))
そして、再度適用しました:
f (g (head [1..100]))
その結果、
f (g 1)
単純に怠惰なため、中間リストは形成されません。
この分析は正しいですか?そして、次のような単純な構造を使用します。
foldl' ... $ map f1 $ map f2 $ createlist
「リストの融合」がなくても、中間リストが作成されることはありますか? (怠惰はそれらを簡単に排除すべきだと思います)。
リストを保持する理由を確認できる唯一の場所は、そうしたかどうかです。
l' = [1..100]
l = map f (map g l')
を他の場所で使用する場合、保持したいl'
場所。ただし、l'
上記の場合、コンパイラーが上記のリストを保存するよりも再計算する方が速いことに気付くのはかなり簡単です。