まず、カウンターで何をしようとしているのかちょっと混乱していますが、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 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
しようとしているものである
let someFunction n =
let rec aux count =
if count >= n then count
else aux (count+1) in
aux 0 ;;
:良いアイデアは)あなたは参照せずにこれを行うことができます
一方で、あなたは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
おそらく私の元のコードスニペットは明確ではありませんでした。 someFunctionが再帰的に何回呼び出されたかを追跡したいだけでした。これはまだ私にとって非常に混乱しています、そして、私はあなたが今書き込んだことを理解しようとしています。 – Kevin
@ user1151063:もう一度やり直して最後のコードスニペットを見てみましょう。私が知る限り、あなたの質問のコードで達成しようとしているものです。 – aneccodeal