3
我對SML真的很陌生,我無法弄清楚如何得到同樣的答案;SML/NJ while循環
它類似於: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;
功能版本工作正常,但不純的版本需要你推薦的。非常感謝..我應該也發佈更正的代碼。 –
準確地說,'fun'是'val rec'的語法糖。我相信你已經知道@newacct,並且爲了簡單的答案(相當於...)簡化了它。但我認爲這仍然值得一提。 –
@ Jesper.Reenberg:是的,我知道(我編輯了答案)。並且'fun'允許你寫多個(curried)參數,而使用'val'你必須做'fn a => fn b =>' – newacct