Я действительно новичок в SML и не могу понять, как получить ответ на этот вопрос;
Это выглядит примерно так: 3 ^ 4 <32, но 3 ^ 5> 32, поэтому мой ответ 4 (степень 3), аналогично, если у меня есть числа 4 и 63, то 4 ^ 2 <63, но 4 ^ 3> 63 поэтому мой ответ 2 (степень 4).
Я придумал следующий код
val log (b, n) =
let
val counter = ref b
val value = 0
in
while !counter > n do
( counter := !counter*b
value := !value + 1)
end;
Таким образом, здесь значение - это то, что мне нужно в качестве ответа, но я получаю много ошибок. Я знаю, что я неправ во многих местах. Любая помощь будет оценена.
Возможно, я могу сделать это обычным способом ML, но я хочу научиться и нечистому ML ...
fun loghelper(x,n,b) = if x>n then 0 else (1+loghelper((x*b),n,b));
fun log(b,n) = loghelper(b,n,b);
Хорошо, наконец, вот правильный код для цикла while, и он также работает;
fun log (b, n) =
let
val counter = ref b
val value = ref 0
in
while (!counter <= n) do
(counter := !counter*b;
value := !value + 1);
!value
end;