traceディレクティブで関数呼び出しをトレースする

再帰がわかりにくい場合#traceで呼び出しをトレースできる、ということを知りました。

let rec sum lst = match lst with
    [] -> 0
  | first :: rest -> first + sum rest

let test1 = sum [1;2;3;4;5] = 15

#trace 関数名;;でトレースを開始して、#untrace 関数名;;で解除

# #trace sum;;
sum is now traced.
# sum [1; 2; 3; 4; 5] ;;
sum <-- [1; 2; 3; 4; 5]
sum <-- [2; 3; 4; 5]
sum <-- [3; 4; 5]
sum <-- [4; 5]
sum <-- [5]
sum <-- []
sum --> 0
sum --> 5
sum --> 9
sum --> 12
sum --> 14
sum --> 15
- : int = 15
# #untrace sum;;
sum is no longer traced.