Я хотел бы сгенерировать довольно большое, но конечное декартово произведение в Haskell, которое мне нужно затем итерировать на (думаю, что статистическая сумма модели среднего -поля ). Естественная вещь для использования использует 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
(, которая работает ), но это похоже на изобретение велосипеда, и, кроме того, это слишком специфично. Какой может быть лучший ленивый способ создания продукта?