我如何懒惰地评估 Haskell 中的列表差异?

How can I lazily evaluate a list difference in Haskell?

有没有一种方法可以评估无限列表之间的列表差异?例如,([1..] \ [2*n | n <- [1..]]) 的计算结果应为 [1,3,5,7,...]。不幸的是,它似乎强制对第一个或第二个列表或两者进行评估。有没有办法避免这种情况以获得答案?即使使用 take 5 ([1..] \ [2*n | n <- [1..]]) 也不会计算为 [1,3,5,7,9],这显然是正确的。请注意,\ 运算符是从 Data.List.

导入的

如果列表已排序,您可以使用 data-ordlist 包。

Data.List.Ordered> take 5 ([1..] `minus` [2,4..])
[1,3,5,7,9]