OCaml簡単文法 ------------- ※ スペースが空いているところには空白や改行やコメントをいくら入れてもよい。 コメントは (* で始まり *) で終わる。 ※ OCamlの対話環境(起動して#が表示された状態)において、 式か宣言の後に ;; を入力してEnterキーを押すと評価される。 (この ;; は入力終了の合図であって、式や宣言の一部ではない。) 式 -- 整数 0, 1, -2, 345, -6789 など 浮動小数点数 1.2, -3.45, 6. など 文字列 "abc", "d", "ef\n" など 文字 'a', 'b', '\n' など 論理値 true, false 式1 + 式2 整数の足し算 式1 - 式2 整数の引き算 式1 +. 式2 浮動小数点数の足し算 式1 -. 式2 浮動小数点数の引き算 式1 ^ 式2 文字列をつなげる 式1 = 式2 式の値が等しければtrue, 異なればfalse (中略) 同様の簡単な計算 if 式1 then 式2 else 式3 式1を評価して、値がtrueなら式2、 falseなら式3を評価する let 変数名 = 式1 in 式2 式1を評価して値を変数におき、式2を評価する (その変数は式2の中でのみ使える) 変数名 変数の値(関数名や引数名も含む) let 関数名 引数名1 引数名2 … 引数名n = 式1 in 式2 「n個の引数を受け取って、式1の値を返す」 という関数を定義し、式2を評価する (その関数は式2の中でのみ使える) 式 式1 式2 … 式n 関数呼び出し (最初の式が関数、それ以降の式が引数になる) 注意: f x + yなどは(f x) + yと解釈されるので f (x + y)という意味の場合は括弧が必要 let rec 関数名 引数名1 引数名2 … 引数名n = 式1 in 式2 「n個の引数を受け取って、式1の値を返す」 という再帰関数を定義し、式2を評価する (その関数は式1と式2の中でのみ使える) () ユニット(関数の引数や返値がないときに使う ダミーの値) (式1, 式2, …, 式n) 組(ペア、タップル) [| 式1; 式2; …; 式n |] 配列 式1.(式2) 「式1」の配列の「式2」番目の要素を返す (先頭を0番目とする) 式1.(式2) <- 式3 「式1」の配列の「式2」番目の要素を 式3の値で上書きする [ 式1; 式2; …; 式n ] リスト 式1 :: 式2 「式1」の値を、「式2」のリストの先頭に 一つの要素として追加したリストを返す 式1 @ 式2 「式1」のリストと「式2」のリストを 連結したリストを返す match 式1 with [] -> 式2 | 変数名1 :: 変数名2 -> 式3 「式1」のリストが空だったら式2を評価する そうでなければ「式1」のリストの先頭要素を 変数名1におき、それ以外の残りのリストを 変数名2において、式3を評価する read_int () キーボードから整数を読み取って返す Printf.printf 書式指定文字列 式1 式2 … 式n 画面に文字や整数などを表示する (C言語のprintfとほぼ同様) 式1 ; 式2 式1を評価してから、式2を評価する (式1の値は捨てられる) ( 式 ) 式に括弧をつけてまとめる 宣言 ---- let 変数名 = 式 式を評価して値を変数におく (以降のすべての式で使える) let 関数名 引数名1 引数名2 … 引数名n = 式 関数を定義する (以降のすべての式で使える) let rec 関数名 引数名1 引数名2 … 引数名n = 式 再帰関数を定義する (=の右辺の式と、以降のすべての式で使える)