#trace
OCaml で関数をトレースすると、出力に次のようなものが含まれる場合があります。
subRec --> <fun>
subRec* <-- "_1"
subRec* --> <fun>
subRec** <-- Var "_1"
星/スプラットは何を意味しますか?
これは、部分適用の結果をカリー化された関数にマークするために使用されます。let f x y = ...
は と同等ですlet f x = fun y -> ...
: パラメータを適用するx
と新しい関数が返され、その関数がy
計算するパラメータを受け取ります。最初の関数は としてトレースされf
、2 番目の (たとえば、 によって返されるf 1
)は としてトレースされf*
ます。
# let f x y = x + y;;
# #trace f;;
# f 1 2;;
f <-- 1
f --> <fun>
f* <-- 2
f* --> 3
- : int = 3
# let g = f 1;;
f <-- 1
f --> <fun>
val g : int -> int = <fun>
# g 2;;
f* <-- 2
f* --> 3
- : int = 3