地图的结果列表是一个更长的时间
这个问题在这里已经有了答案:
正如@duplode所建议的那样,它与如何..
与浮点运算和整数运算相关:
Prelude> let x3 = [1,3..10] :: [Double]
Prelude> length x3
6
Prelude> let x3 = [1,3..10] :: [Int]
Prelude> length x3
5
更新回应评论...
像这样的定义在ghci中:
let xs = [1,3..11]
是多态的。 ..
是enumFromThenTo
函数的快捷方式:
let xs = enumFromThenTo 1 3 11
结果是多态的 - 上面的表达式具有类型:
ghci> :t xs
x3 :: (Enum t, Num t) => [t]
如果你只是打印出来,Haskell选择输入为[Integer]
,你会得到:
[1,3,5,7,9]
这里使用了Integer版本的enumFromThenTo
。
但是,如果将浮点操作应用于列表,则Haskell将其解释为[Double]
,然后由于上面解释的原因它变成一个更长的元素:
ghci> map (+ 0.0) x3
[1.0,3.0,5.0,7.0,9.0,11.0] -- length 6 now!
因此, map
操作“改变”列表的长度只是因为它改变了其类型的解释,这种解释改变了调用enumFromThenTo
函数来构造它。
Upshot:定义为[1,3..11]
列表在确定其类型之前不具有已知长度。
上一篇: result list of map is one longer
下一篇: JQUERY: Uncaught Error: Syntax error, unrecognized expression