您正在使用;;
太多。與流行的觀點相反,;;
不是普通OCaml語法的一部分(無論如何,我認爲)。這只是一種告訴頂層(REPL)的特殊方法,您希望它能評估您迄今輸入的內容。
在open Array
之後留下;;
。但是,除了最後的;;
改爲;
以外。
(因爲你的名字在你的代碼,這恕我直言是好作風引用Array
模塊,您也可以直接離開了open Array;;
乾脆。)
你想最後;;
因爲你想要的頂層到評估你到目前爲止輸入的內容。
你的語法錯誤是由事實,你的整個代碼是這樣
let ... in
let ... in
while ... do
...
done
m
的while
造成一個表達式(OCaml中一切都是表達式)和m
是另一種表達。如果你想連續使用兩個表達式,你需要在它們之間使用;
。所以你需要;
後done
。
您也有類型錯誤。當您創建m
時,您將創建一個int數組(您的初始值爲0)。所以你不能在代碼中將它變成一個矩陣(一個數組數組)。另外(不要試圖用批評來重載你:-)這段代碼看起來像命令式的代碼。這不是特別習慣的OCaml代碼。在大多數人的代碼中,使用ref
是非常罕見的。我看到的一個直接改進就是說let n = 5
。你看不到任何地方的n
的值(儘管也許這是更大塊代碼的一部分)。另一個改進是使用for
而不是while
。
最後,你可以在一個函數調用做整個操作:
let n = 5 in
let m = Array.init n (fun i -> Array.make n 0) in
m
使用顯式循環實際上也OCaml中相當罕見(至少在我的代碼)。
或者你可以試試這個:
let n = 5 in
let m = Array.make_matrix n n 0 in
m
HI @power_output,因此不代碼工廠......你要問一個具體問題。 –
我在Java和C中學到了很多東西,只是通過搜索Google多次導致SO,但現在我遇到了這種語言的問題。我用例子學得最好,但是我沒有看到這種語言。我一直在看這段代碼改變了很長一段時間,但我似乎無法弄清楚什麼是錯的,這就是爲什麼我來這裏希望有人能伸出援助之手。 –
你有什麼錯誤? –