ハスケルではかなり大きいが有限のデカルト積を生成したいと思っています。これを反復する必要があります(平均場モデルの分割関数を考える)。行うには自然なことは、このように、sequence
を使用しています。ハスケルのレイジーデカルト積
l = sequence $ replicate n [0,1,2]
残念ながら、大n
のために、これはメモリに収まらないと私はすぐに私は例えばlength l
を求めるようヒープが不足し。私は同じことをゆっくりと行う方法が必要です。私はこのような基本-3算術演算、
nextConfig [] = []
nextConfig (0:xs) = 1:xs
nextConfig (1:xs) = 2:xs
nextConfig (2:xs) = 0:(nextConfig xs)
ll = take (3^n) $ iterate nextConfig $ replicate n 0
を「再発見」終わった(これは動作します)が、それは車輪の再発明のように感じ、それ以外にもあまりにも具体的です。製品を生成するためのより良い方法は何でしょうか?より多くのメモリに優しい方法は、配列と比較して逆の順序で結合することによって得られる
結果の要素の順序は気になりますか? – augustss
いいえ、繰返しがない限り。 –
「n」はどれくらいの大きさが必要ですか? – dave4420