5

#traceOCaml で関数をトレースすると、出力に次のようなものが含まれる場合があります。

subRec --> <fun>
subRec* <-- "_1"
subRec* --> <fun>
subRec** <-- Var "_1"

星/スプラットは何を意味しますか?

4

1 に答える 1

5

これは、部分適用の結果をカリー化された関数にマークするために使用されます。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
于 2013-02-06T18:26:46.207 に答える