Во-первых, я немного озадачен тем, что вы пытаетесь сделать со счетчиком, разве вы не хотите, чтобы он считал до 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
) ;;