首先,我对你想用柜台做什么感到困惑,你不想让它数到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