在标准 ML 中使用乘法和迭代的幂函数

Power function using multiplication and iteration in Standard ML

我无法理解仅使用迭代和乘法在 SML 中实现幂函数的方法。

我的迭代如下:

fun iterate 0 f x = x
  | iterate n f x = iterate (n-1) f (f x);

虽然我的乘法基本上是递归迭代

fun multiply 0 f = 0
  | multiply f x = iterate x (fn x => x + 1) (multiply x (f-1));

幂函数基本上是相同基数的乘法迭代,但我不知道要减少哪个值

power n f = iterate (mult n n) (fn x => x + 1) (power (n) (f-1))

这绝对是错误的

power n f = iterate (mult n n) (fn x => x + 1) (power (n) (f-1))

所以,说到命名,我肯定会写power x ypower i jpower x n之类的,因为xyijn 看起来像是数字或整数,而 f 看起来像是一个函数。所以马上你有:

fun power x y = iterate (...a...) (...b...) (...c...)

至于这三个部分的内容,...a...、...b...和...c...:

一个。 iterate这个东西调用n,也就是迭代的次数

b。 iterate这个东西调用了f,也就是每次要申请的函数

c。 iterate这个东西调用了x,也就是每次应用的东西

正如在 中详细阐述的那样,让 power 调用自身是没有意义的;使用 iterate 的目的是将递归移交给此 list-combinator 而不是使用显式递归(其中 power 在其定义的某处引用了自身)。