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

Sml 在标准ML中使用乘法和迭代的幂函数,sml,ml,Sml,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 =

我很难理解在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))
这绝对是错误的

所以,当提到命名时,我肯定会写
powerxy
powerij
powerxn
之类的东西,因为
x
y
I
j
n
看起来像是数字或整数,而
f
看起来像是函数。所以你马上就有了:

fun power x y = iterate (...a...) (...b...) (...c...)
至于这三个部分中的每一部分是什么,…a…,…b。。。和…c…:

a。thing
iterate
调用
n
,这是迭代的次数

b。iterate
调用
f
,这是每次应用的函数

c。迭代
调用
x
,这是每次应用的内容


如中所述,调用
power
本身是没有意义的;使用
iterate
的目的是将递归交给这个列表组合器,而不是使用显式递归(其中
power
在其定义中的某个地方引用了它自己)。

你的问题肯定与我今天早些时候给出的答案完全相同。看看那一个。:-)
fun power x y = iterate (...a...) (...b...) (...c...)