我怎样才能有效地表示列表[0..] \\ [t+0*p, t+1*p ..]
?
我已经定义:
Prelude> let factors p t = [t+0*p, t+1*p ..]
我想有效地表示一个无限列表,它是 和 的区别[0..]
,factors p t
但使用\\
fromData.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
每个元素的情况下有效地表示吗?