我如何懒惰地评估 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]
有没有一种方法可以评估无限列表之间的列表差异?例如,([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]