与 python 中的模运算符相比, OCaml mod
中的模函数返回结果不同。
OCaml:
# -1 mod 4
- : int = -1
Python:
>>> -1 % 4
3
为什么结果不同?
在OCaml中是否有任何可作为
%
运行的标准模块功能? 最佳答案
Python在%
运算符的用法上略有不同,它实际上计算两个值的模,而其他编程语言使用相同的运算符计算余数。例如,Scheme中的区别很明显:
(modulo -1 4) ; modulo
=> 3
(remainder -1 4) ; remainder
=> -1
在Python中:
-1 % 4 # modulo
=> 3
math.fmod(-1, 4) # remainder
=> -1
但是在OCaml中,根据此table和documentation中所述,只有
mod
(用于计算整数余数):-1 mod 4 (* remainder *)
=> -1
当然,您可以按照
modulo
来实现自己的remainder
操作,如下所示:let modulo x y =
let result = x mod y in
if result >= 0 then result
else result + y