我正在学习Jason Hickey 的 Objective Caml 简介。
只是对重新定义中缀运算符有疑问。
所以在书中,有这样一段话:
# let (+) = ( * )
and (-) = (+)
and ( * ) = (/)
and (/) = (-);;
val + : int > int > int = <fun>
val - : int > int > int = <fun>
val * : int > int > int = <fun>
val / : int > int > int = <fun>
# 5 + 4 / 1;;
-: **int = 15**
首先,这些重新定义是如何工作的?
对我来说,这些函数似乎在一种无限循环中运行,因为所有操作似乎都重新定义并相互关联。
例如,如果我这样做1+2
,那么它将是1 * 2
,并且因为( * ) = (/)
,它将是,然后1 / 2
,因为(/) = (-)
,那么它将是1-2
,等等。我对吗?
其次,即使函数在重新定义中只执行了一步,结果是否5 + 4 / 1
会是?15
因此,假设重新定义将进一步执行,即1 + 2
只会进行1 * 2
转换,不再进行转换,所以5 + 4 / 1
应该是5 * 4 -1
,对吗?那么答案是19
。我对么?