2016-03-20 43 views
0

我有一個OCaml函數可以將字符串轉換爲數組。寫一個「main」函數來調用這個函數並打印這個數組的規範方法是什麼?寫main()來調用函數

let createArray pattern patArray = 
    (* some unimportant way of setting all the elements in the array patArray 
     based on the string pattern *) 


let main() = 
    let pattern = "Pattern" in 
     let patArray = Array.create (String.length pattern) 0 in 
      let res = createArray pattern patArray in 
       Array.iter ~f:(printf "%d ") patArray;; <------------------ 

main() 

1)在上面,如果我忽略';;' , 這是行不通的。那有什麼意義呢?

2)而不是使用虛擬結合「資源」,可不知何故,我只是寫兩個語句的順序執行的,就像這樣:沒有;;

createArray pattern patArray 
Array.iter ~f:(printf "%d ") patArray 

回答

1

,分析器無法知道main()通話該行應該是一個獨立的表達式(這裏空白不重要)。

您可以使用下面的語句來代替:

let main() = ... 
let() = main() 

let() = expr成語將在該點評估unit類型的表達式。最初的let通知解析器一個新的頂層let構造開始。使用;;是告訴解析器關於頂級構造的結束的替代方式,但主要用於交互式使用。

爲了按順序評估兩個表達式,用分號分隔它們(如果您不確定優先規則,請使用圓括號或begin ... end)。例如:

let patArray = Array.create (String.length pattern) 0 in 
    createArray pattern patArray; 
    Array.iter ~f:(printf "%d ") patArray 

或者,使用beginend使優先級更加清晰:

let patArray = Array.create (String.length pattern) 0 in begin 
    createArray pattern patArray; 
    Array.iter ~f:(printf "%d ") patArray 
end 

沒有;,分析器不會知道下一行Array.iter是否應該附加參數撥打createArray

相關問題