Jason Hickey の 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、というようになります。私は正しいですか?
第 2 に、関数が再定義で 1 ステップだけ実行されたとしても、の結果は に5 + 4 / 1なりますか?15
したがって、再定義がさらに 1 ステップ実行されると1 + 2仮定1 * 2し5 + 4 / 1ます5 * 4 -1。答えは19です。私は正しいですか?