Objective Caml ことはじめ
講義があまりに退屈なので一人でまとめてみる。
利用環境
詳細はOcaml.jpにある。
バッチコンパイルも当然可能だが、基本的にはインタプリタを利用する。
とりあえずは開発ではなく学習が目的故、ここでもインタプリタを主に使うことにする。
インタプリタはリンクを辿ればDL可能。
Linux,Mac,Windowsと、各環境に合わせて提供されている。
Windowsの場合cygwinでソースをコンパイルしてもいいが、配布されているバイナリパッケージでも十分事足りる。
基本作法
;;(セミコロン二つ)がOcamlにおける区切り。このターミネータを入力しない限り評価はなされない。
すなわち
# 1+2 ;;
- : int = 3
# 1+2
;;
- : int = 3
# 1
+
2
;;
- : int = 3
このような感じで入力・出力がなされる。
評価結果の束縛 let
値と変数の対応付けをMLでは束縛と呼び、 let a= という書式を用いる。(aは変数名。小文字ではじめる必要がある)
Ocamlでは一度束縛すると変数の値は変更できなくなるので注意が必要。束縛により変更不能になる点は関数型言語の特徴である。
値の代わりに式を定義することも可能で、既に束縛されている変数は式中で利用可能。(例1-1)
ローカル変数の定義もでき、 let x = e1 in e2 という書式を用いる(値e1の変数xはe2でのみ利用可能)。この場合、xがすでにe2の外で束縛されている場合もxの値はe1として評価される。(例1-2)
ここまでをコードで表記すると
変数へ値と式を束縛(例1-1)
# let a = 10;;
val a : int = 10
# a;;
- : int = 10
# let b=a*2;;
val b : int = 20ローカル変数の束縛とその適用範囲(例1-2)
# let a=10;;
val a : int = 10
# let a=2 in a+1;;
- : int = 3
# a+1;;
- : int = 11
のようになる
基本データ型
int 整数
float 浮動小数点数。(Cの倍精度相当)
char 文字。引用符で表現('c','h','a','r')
string 文字列。二重引用符で表現("string")
bool 真偽値。ture or false
unit ()という値を持つ。 Cのvoidに近い。
演算子
手元のドキュメントにはっきりとした言及がないので詳細はまだ不明。いずれ加筆予定。
とりあえず整数同士なら四則演算とmod演算は特に意識せずとも可能らしい。
浮動小数点同士の四則演算には("+." , "-." , "*." , "/." )を用いる。
文字列結合は"^"である。
ただ、Camlは値の型が厳しく区別されるため異なる型間での演算はできない。(例3)
同型同士の演算
# 1+2;;
- : int = 3
# 3.5-.2.0;;
- : float = 1.5
# "hoge"^"hage";;
- : string = "hogehage"
異なる型間での演算はエラーを出力する(例1-3)
# 1*2.5;;
Characters 2-5:
1*2.5;;
^^^
This expression has type float but is here used with type int
# 1 *. 2.5;;
Characters 0-1:
1 *. 2.5;;
^
This expression has type int but is here used with type float