为什么浮点数的Haskell范围符号的行为与整数和字符的行为不同?
Prelude> [1, 3 .. 10] :: [Int]
[1,3,5,7,9]
Prelude> [1, 3 .. 10] :: [Float]
[1.0,3.0,5.0,7.0,9.0,11.0]
Prelude> ['a', 'c' .. 'f']
"ace"
Run Code Online (Sandbox Code Playgroud)
如果最后一个元素接近上限,我会理解它,但这显然不是一个舍入问题.
我刚开始学习Haskell并发现了一件奇怪的事情.
我们有一个清单:
ghci> [0,2..5]
[0,2,4]
Run Code Online (Sandbox Code Playgroud)
它有3个元素.当我使用map这个列表时,我得到3个元素作为输出,例如:
ghci> map (+ 1) [0,2..5]
[1,3,5]
ghci> map (* 2) [0,2..5]
[0,4,8]
ghci> map (`div` 2) [0,2..5]
[0,1,2]
Run Code Online (Sandbox Code Playgroud)
但是当我使用小数除法时,我在输出列表中得到4个元素:
ghci> map (/ 2) [0,2..5]
[0.0,1.0,2.0,3.0]
ghci> length (map (/ 2) [0,2..5])
4
Run Code Online (Sandbox Code Playgroud)
你能否解释为什么map可能会返回更多的元素呢?
谢谢!