【发布时间】:2011-11-24 18:38:37
【问题描述】:
我对 SML 真的很陌生,但我不知道如何获得相同的答案;
它类似于:3^4 32 所以我的答案是 4(3 的幂),同样,如果我有数字 4 和 63,那么 4^263所以我的答案是 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;
【问题讨论】:
标签: while-loop sml smlnj