【发布时间】:2010-07-24 11:17:40
【问题描述】:
为什么下一段给出 4?
(\x -> (x-1) `mod` 5) 0
【问题讨论】:
标签: haskell
为什么下一段给出 4?
(\x -> (x-1) `mod` 5) 0
【问题讨论】:
标签: haskell
因为 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,而不是/。
-1 modulo 根据定义,5 是 4。
【讨论】: