【问题标题】:'mod' and -1 in haskell [duplicate]haskell中的'mod'和-1 [重复]
【发布时间】:2010-07-24 11:17:40
【问题描述】:

为什么下一段给出 4?

(\x -> (x-1) `mod` 5) 0

【问题讨论】:

    标签: haskell


    【解决方案1】:

    因为 mod 被定义为正数。 div 和 mod 以楼层为基础运行,而 / 和 rem 不运行。

    Prelude> let x=(-2)
    Prelude> let y=5
    Prelude> (x`div`y)*y+(x`mod`y)
    -2
    Prelude> y*(truncate ((fromInteger x)/fromInteger y)) + (x`rem`y)
    -2
    Prelude> x`rem`y
    -2
    Prelude> x`mod`y
    3
    Prelude> (fromInteger x)/fromInteger y
    -0.4
    Prelude> x`div`y
    -1
    

    附录:正如 KennyTM 正确指出的那样,我应该使用 quot,而不是 /:

    Prelude> (x`quot`y)*y+(x`rem`y)
    -2
    Prelude> (x`quot`y)
    0
    

    我只是不记得了,太仓促了,没去查。 quot 将进行整数除法。

    【讨论】:

    • div的对应关系应该是quot,而不是/
    【解决方案2】:

    -1 modulo 根据定义,5 是 4。

    【讨论】:

    • 它因编程语言和您使用的 mod 功能而异
    猜你喜欢
    • 1970-01-01
    • 2011-08-18
    • 1970-01-01
    • 2013-11-15
    • 1970-01-01
    • 2011-08-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多