Haskell'de oldukça geniş ama sonlu bir Kartezyen ürünü üretmek istiyorum, ki daha sonra yinelemem gerekiyor (bir ortalama alan modelinin bölüm fonksiyonunu düşünün). yapılacak doğal şey böyle, sequence
kullanır:Haskell'de Lazy kartezyen ürün
l = sequence $ replicate n [0,1,2]
Maalesef büyük n
için, bu bellekte uymuyor ve en kısa sürede ben mesela length l
istemek olarak yığın tükendi. Aynı şeyi tembel bir şekilde yapmaya ihtiyacım var. Ben (çalışıyor), bu gibi
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
baz-3 Arithmetics "yeniden keşfetmeye" sona erdi ama tekerleği yeniden icat gibi hissediyor ve bu çok çok özeldir yanında. Ürünü üretmek için daha iyi tembel bir yol ne olurdu? daha fazla bellek dostu yolu dizisine kıyasla ters sırada bağlanarak elde edilir
Sonuçtaki öğelerin sırasını önemsiyor musunuz? – augustss
Hayır, tekrarlama olmadığı sürece. –
Olmak için neye ihtiyacınız var? – dave4420