2つの機能が与えられたとしましょう:
f :: [a] -> b
g :: [a] -> c
これと同等の関数を書きたい:
h x = (f x, g x)
しかし、それを行うと、大きなリストの場合、必然的にメモリが不足します。
簡単な例は次のとおりです。
x = [1..100000000::Int]
main = print $ (sum x, product x)
x
リストがガベージコレクションされずにメモリに保存されているため、これが当てはまることを理解しています。代わりに、「並行」でf
作業g
したほうがよいでしょう。x
f
andを変更できずg
、別のコピーを作成したくないx
場合 (作成に費用がかかると仮定) 、メモリ不足の問題に遭遇することなくx
どのように書き込むことができますか?h