我确信在SML中有一种优雅的方法,但是我很难跟踪迭代次数(基本上是我调用函数的次数)。
我正在尝试编写一个评估为一对数字的函数,一个用于答案,另一个用于余数。所以,如果你打电话:
divmod(11, 2)
,你会得到(5, 1)
。
这是我到目前为止所拥有的:
divmod(number : int, divisor : int) =
if number < divisor then
(number, count)
else
divmod(number - divisor, divisor);
显然,我没有设置我的计数变量,所以它不会编译,但这是算法的想法。剩下的就是将count初始化为0并且能够在递归调用之间传递它。但我只允许这个函数的两个参数。
但是,我可以编写辅助功能。思想?
答案 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)