SML:如何在没有额外参数的情况下模拟SML中的计数器

时间:2015-02-07 01:02:33

标签: recursion functional-programming sml

我在SML中有一个递归函数,它执行的某些计算对我的问题并不重要。我想要做的是我想跟踪递归发生的次数,因为我想计算算法的迭代次数。我知道如果我宣布:

val counter = 0;
val counter = counter + 1;

另一个计数器是另一个变量。它不是一个递增的。因此,这种类型的递增将在一次递归调用中失去其范围。

有什么方法可以跟踪吗?

1 个答案:

答案 0 :(得分:1)

您可以使用int ref作为可变单元格:

val counter : int ref = ref 0

-- Some dummy recursive function for testing
fun factorial n =
  if n < 1
  then 1
  else (counter := !counter + 1; n * factorial (n - 1))

你可以像这样使用它:

- !counter;
val it = 0 : int
- factorial 10;
val it = 3628800 : int
- !counter;
val it = 10 : int
- factorial 5;
val it = 120 : int
- !counter;
val it = 15 : int