ocaml中的一元减号和一元波浪号减号运算符有什么区别?
我正在学习 OCaml,我正在阅读的文档和书籍在某些方面不是很清楚。
简单来说,两者之间有什么区别
-10
和
~-10
对我来说,它们似乎是一样的。我遇到过其他试图解释这些差异的资源,但它们似乎用我还不熟悉的术语来解释,因为到目前为止我唯一知道的是变量。
回答
事实上,-是一个二元运算符,所以有些表达式可能是不明确的:f 10 -20被视为(f 10) - 20。例如,让我们想象这个虚拟函数:
let f x y = (x, y)
如果我想生成元组,(10, -20)我会天真地写一些类似的东西,f 10 -20这会导致我出现以下错误:
# f 10 -20;;
Error: This expression has type 'a -> int * 'a
but an expression was expected of type int
因为表达式被计算为(f 10) - 20(所以是一个函数的减法!!)所以你可以写这样的表达式:f 10 (-20),它是有效的,或者f 10 ~-20因为~-(和~+和~-. ~+.对于浮点数)是一元运算符,所以适当地尊重前降。