首先,我對你想用櫃檯做什麼感到困惑,你不想讓它數到123嗎?這並不意味着你需要:
while (count < 123) { count++; someFunction(count); }
......這意味着你可以計算它被調用的次數,直到它達到123,然後退出。
如果你想保留多少次的函數被調用了,直到一定的限制計數,那麼你可以使用這樣的裁判:
let someFunction n =
let count = ref 0 in
let rec aux() =
if !count >= n then count
else (
incr count;
(* do the stuff you wanted to do in someFunction here *)
aux()) in
aux() ;;
如果你想避免可變狀態(通常是好主意),那麼你可以這樣做沒有一個裁判:
let someFunction n =
let rec aux count =
if count >= n then count
else aux (count+1) in
aux 0 ;;
也許這就是你想要做的?:
let someOtherFunction n =
Printf.printf "n is: %d\n" n;;
let someFunction n f =
let rec aux count =
if count >= n then count
else (
f count;
aux (count+1)
) in
aux 0 ;;
# someFunction 10 someOtherFunction ;;
n is: 0
n is: 1
n is: 2
n is: 3
n is: 4
n is: 5
n is: 6
n is: 7
n is: 8
n is: 9
- : int = 10
什麼
如果,另一方面,你要跟蹤的someFunction被調用多少次,那麼你就需要在同一作用域級別的someFunction定義,裁判櫃檯,是這樣的:
let count = ref 0 ;;
let rec someFunction n f =
if !count >= 123 then count
else (
incr count;
f n;
someFunction n f
) ;;
編輯:對不起,沒有刷新頁面,我正在閱讀你現在寫的東西 – Kevin 2012-01-16 04:23:27
也許我原來的代碼片段不清楚;我只想記錄遞歸調用someFunction的次數。這對我來說仍然非常混亂,我試圖理解你現在寫的東西。 – Kevin 2012-01-16 04:30:32
@ user1151063:嘗試再次刷新並查看最後一個代碼片段 - 就我所知,這就是您試圖在問題的代碼中實現的內容。 – aneccodeal 2012-01-16 04:39:38