我不明白为什么这两个相似的列表推导会给出不同的结果:

Prelude> let t2s n= [ 1/(2*i) | i <- [1,3..n]]
Prelude> t2s 0
[0.5]
Prelude> let t2s n= [   (2*i) | i <- [1,3..n]]
Prelude> t2s 0
[]

我希望两者都在参数 [] 上返回 0 。我一定错过了一些愚蠢的东西?!

最佳答案

这与以下事实有关

enumFromThenTo 1.0 3.0 0.0

评估为 [1.0] 。浮点数的 enumFromThenTo 规范可以在 http://www.haskell.org/onlinereport/haskell2010/haskellch6.html 的第 6.3.4 节中找到。

10-06 02:43