SML:跟踪迭代次数

时间:2015-08-15 19:18:33

标签: functional-programming sml

我确信在SML中有一种优雅的方法,但是我很难跟踪迭代次数(基本上是我调用函数的次数)。

我正在尝试编写一个评估为一对数字的函数,一个用于答案,另一个用于余数。所以,如果你打电话:

divmod(11, 2),你会得到(5, 1)

这是我到目前为止所拥有的:

divmod(number : int, divisor : int) =
    if number < divisor then
        (number, count)
    else
        divmod(number - divisor, divisor);

显然,我没有设置我的计数变量,所以它不会编译,但这是算法的想法。剩下的就是将count初始化为0并且能够在递归调用之间传递它。但我只允许这个函数的两个参数。

但是,我可以编写辅助功能。

思想?

1 个答案:

答案 0 :(得分:1)

如果SML支持嵌套函数,你可以这样做:

divmod(number : int, divisor : int) =
   _divmod(n : int, d : int, count : int) = 
      if n < d then
         (count, n)
      else
         _divmod(n - d, d, count + 1)
   _divmod(number, divisor, 0)