在标准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或类似的东西,因为xy,{ {1}},ij看起来像是数字还是整数,而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在其定义中引用了自身)。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...