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
です。私は正しいですか?