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

时间:2017-10-23 04:00:16

标签: list haskell lazy-evaluation

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

导入的

1 个答案:

答案 0 :(得分:5)

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

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