Search code examples
functional-programmingsml

SML: Keeping track of number of iterations


I'm sure there's a way to do this elegantly in SML but I'm having difficulty keeping track of the number of iterations (basically the number of times my function has been called).

I'm trying to write a function that evaluates to a pair of numbers, one for the floor of the answer and the other for the remainder. So if you called:

divmod(11, 2), you'd get (5, 1) back.

Here's what I have so far:

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

Obviously, I haven't set up my count variable so it won't compile but that's the idea of the algorithm. All that's left is initializing count to 0 and being able to pass it between recursive calls. But I'm only allowed the two parameters for this function.

I can, however, write auxiliary functions.

Thoughts?


Solution

  • If SML has support for nested functions you could do like this:

    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)