Função de poder usando multiplicação e iteração no ML padrão

Aug 28 2020

Estou tendo problemas para entender um método para implementar uma função de potência em SML usando apenas iteração e multiplicação.

minha iteração é a seguinte:

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

enquanto minha multiplicação é basicamente iterativa recursivamente

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

A função de potência seria basicamente uma iteração da multiplicação da mesma base, mas não sei qual valor diminuir

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

o que é definitivamente errado

Respostas

1 SimonShine Aug 28 2020 at 19:08
power n f = iterate (mult n n) (fn x => x + 1) (power (n) (f-1))

Assim, quando se trata de nomeação, eu poderia definitivamente escrever power x you power i jou power x nou algo assim, pois x, y, i, jou nparecem que estão números ou números inteiros, enquanto que fparece que é uma função. Então, de cara, você tem:

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

Quanto ao que entra em cada uma dessas três partes, ... a ..., ... b ... e ... c ...:

uma. A coisa iteratechama n, que é o número de vezes para iterar.

b. A coisa iteratechama f, que é a função a ser aplicada a cada vez.

c. A coisa iteratechama x, que é o que é aplicado a cada vez.

Conforme elaborado em Como fazer uma função de multiplicação usando apenas a função de adição e a função de iteração no SML , não há sentido em fazer a powerprópria chamada; o objetivo de usar iterateé passar a recursão para este combinador de lista em vez de usar a recursão explícita (onde powertem uma referência a si mesmo em algum lugar em sua definição).