地图的结果列表是一个更长的时间

这个问题在这里已经有了答案:

  • 为什么在Haskell中使用范围时map会返回一个额外的元素? 1个答案

  • 正如@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]列表在确定其类型之前不具有已知长度。

    链接地址: http://www.djcxy.com/p/87991.html

    上一篇: result list of map is one longer

    下一篇: JQUERY: Uncaught Error: Syntax error, unrecognized expression