最終更新:2010-12-15 (水) 04:08:28 (5021d)
OCaml
Top / OCaml
Objective Caml (Categorical Abstract Machine Language)
フランスの情報技術系の研究機関の INRIA で開発されている関数型言語 ML (の方言)
目的・効用は、
対話式コンパイラ
ocaml
;; と入力で評価実行 #quit;; でインタプリタ終了
特徴
- 強い静的型付け
サンプル
型
- int
0b10 - 2進数 0o10 - 8進数 10 - 10進数 0x10 - 16進数
- float
10.
- 演算子は +. -. *. /.
- char
- string
- 結合演算子 ^
"hello"^" world""
キャスト
- X_of_Y という関数がある
- int_of_float (floatをintに、小数点以下切り捨て)
コメント
(*ここにコメント*)
変数束縛?
- 変数に値を割り当てること
# let pi = 3.14;; val pi : float = 3.14 # pi;; - : float = 3.14 # let pi : float = 3.14;;(*型を指定*)
関数
let sampleFunc arg1=arg1*arg1;;
局所的変数束縛?
let 変数 = 式1 in 式2;;
- 式1を評価
- 変数をその値に束縛
- 式2の評価結果の値を求める
変数の同時束縛
# let x=2 and y=1;; val x : int = 2 val y : int = 1 # let x=y and y=x;; (*同時に値を束縛*) val x : int = 1 val y : int = 2
分岐
# let abs x = if x>0 then x else -x;; val abs : int -> int = <fun> #abs 5;; - : int = 5 #abs(-4);; - : int = 4
データ構造
タプル
- 複数の値を並べたもの
# (1.0, 2.0);; - : float * float = (1., 2.)
- *はタプルの型構築子
- 代入
# let hoge =(1.0,2.0,("hoge",1));;(*入れ子のタプル*) val hoge : float * float * (string * int) = (1., 2., ("hoge", 1)) # let (val1,val2,(val3,val4))=hoge; (*要素の取り出し*) val val1 : float = 1. val val2 : float = 2. val val3 : string = "hoge" val val4 : int = 1 (*ワイルドカードパターン*) (*一部の値が必要ない場合は_と書いておく*) # let (_,_,(val3,_))=hoge;;(*val3だけ取り出し*) val val3 : string = "hoge"
タプルを用いた関数
# let avg p = let (x,y) = p in (*値の取り出し*) (x +. y)/.2.0;;(*評価*) val avg : float * float -> float = <fun> # avg (2.5,3.5);; - : float = 3.
ディレクティブ
- #quit
- #cd <ディレクトリ名>
- #use <ファイル名>
- #load <ファイル名>
- #print_depth <整数>
- #print_length <整数>
- #trace <関数名>
- #untrace <関数名>