Função de poder usando multiplicação e iteração no ML padrão
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
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).