问题描述
我很难理解仅使用迭代和乘法来在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
,{ {1}},i
或j
看起来像是数字还是整数,而n
看起来像是一个函数。所以马上就可以拥有
f
关于这三个部分的内容,... a ...,... b ...和... c ...:
a。 fun power x y = iterate (...a...) (...b...) (...c...)
被称为iterate
的事物,它是要迭代的次数。
b。 n
称为iterate
,这是每次都要应用的功能。
c。 f
被称为iterate
的事物,这就是每次应用的事物。
如How to make a multiplication function using just addition function and iterate function in SML所述,x
本身没有任何意义;使用power
的目的是将递归移交给该列表组合器,而不是使用显式递归(其中iterate
在其定义中引用了自身)。