在标准 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 y
或power i j
或power x n
之类的,因为x
、y
、i
、j
或 n
看起来像是数字或整数,而 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
在其定义的某处引用了自身)。
我无法理解仅使用迭代和乘法在 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 y
或power i j
或power x n
之类的,因为x
、y
、i
、j
或 n
看起来像是数字或整数,而 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
在其定义的某处引用了自身)。