【发布时间】:2012-12-03 15:20:27
【问题描述】:
我正在学习Jason Hickey's Introduction to 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。 我说的对吗?
【问题讨论】:
标签: functional-programming ocaml