有没有办法评估无限列表之间的列表差异?例如,([1..] \\ [2*n | n <- [1..]])
应评估为[1,3,5,7,
... ]
。不幸的是,它似乎迫使对第一个或第二个列表或两者进行评估。有没有办法避免这个得到答案?即使使用take 5 ([1..] \\ [2*n | n <- [1..]])
也不会评估为[1,3,5,7,9]
,这显然是正确的。请注意,\\
运算符是从Data.List。
答案 0 :(得分:5)
如果列表已排序,您可以使用data-ordlist
包。
Data.List.Ordered> take 5 ([1..] `minus` [2,4..])
[1,3,5,7,9]