我開始學習ocaml的,我不明白爲什麼這樣循環下去:鬧掰了一個循環
let x = true in
while x do
print_string "test";
x = false;
done;;
我缺少什麼?
我開始學習ocaml的,我不明白爲什麼這樣循環下去:鬧掰了一個循環
let x = true in
while x do
print_string "test";
x = false;
done;;
我缺少什麼?
這是因爲OCaml讓綁定是不可變的。這個確切的問題是ocaml.org教程中的discussed in detail。使用REF代替,並設置和使用!
和:=
獲得其持有的價值:
let x = ref true in
while !x do
print_string "test";
x := false
done;;
一個原因,研究OCaml的是學會如何計算與不變的值。下面是一個不依賴於一個可變變量的一個版本:
let rec loop x =
if x then
begin
print_string "test";
loop false
end
in
loop true
訣竅是重新設想的可變值作爲函數的參數,這使得他們有不同的價值觀不同的時間。
最好運行ocaml警告和嚴格的序列來檢測問題。例如
$ ocaml -strict-sequence -w A
OCaml version 4.01.0
# let x = true in
while x do
print_string "test";
x = false;
done;;
Error: This expression has type bool but an expression was expected of type
unit
這說明了什麼問題:x = false
正在測試x
是否是虛假或不,不這樣做的任務。