リストを効率的に表現するにはどうすればよい[0..] \\ [t+0*p, t+1*p ..]
ですか?
私は定義しました:
Prelude> let factors p t = [t+0*p, t+1*p ..]
と の違いである無限リストを効率的に表現したいのですが、fromを使用すると、[0..]
中規模のリストでも大量のメモリが必要になります。factors p t
\\
Data.List
Prelude Data.List> [0..10000] \\ (factors 5 0)
<interactive>: out of memory
t+0*p
との間の値を次のように表すことができることを知っていますt+1*p
。
Prelude> let innerList p1 p2 t = [t+p1+1, t+p1+2 .. t+p2-1]
Prelude> innerList 0 5 0
[1,2,3,4]
ただし、innerList
間隔を増やして繰り返し計算と連結を行うのは、扱いにくいようです。
[0..] \\ (factors p t)
計算せずにrem
、またはmod
要素ごとに効率的に表現できますか?