2016-03-20 27 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)上記で、 ';;' 、 それは動作しません。その意義は何ですか? ;;なし

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

答えて

1

、パーサはそのmain()通話を知ることはできません。

2)の代わりに結合ダミーを使用しての「解像度」、私は何とかちょうどそうのように、順次実行される2つの文を書くことができますその行はスタンドアロンの式(空白はここでは重要ではありません)であるはずです。

あなたは代わりに、次のイディオムを使用することができます。

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

let() = exprイディオムは、その時点でタイプunitの発現を評価します。最初のletは、新しい最上位のlet構成が始まることをパーサに通知します。 ;;を使用すると、パーサーに最上位コンストラクトの終わりを伝える別の方法ですが、主に対話的な使用を意図しています。

2つの式を順に評価するには、セミコロンで区切ってください(括弧を使用するか、優先ルールが不明な場合は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コール。

関連する問題