6. 関数型言語 OCaml の紹介
フランスの INRIA で開発された ML 系の言語
値の束縛: let x = 100 in x + 10
関数定義: let dbl x = x * 2 in dbl 10
再帰関数の定義:
let rec fib x =
if x <= 1 then 1
else fib (x - 1) + fib (x - 2)
http://ocaml.org/docs/logos.html より引用
6
9. バリアント型とタプル
バリアント型: 1 つの型で、ラベル (と値) のいずれかを選択する値を保持できる
タプル型: 1 つの型で、複数の異なる型の値を同時に保持できる
type literal =
| Int of int
| Boolean of bool
Int 10 : literal
type 'a optional =
| Some of 'a
| None
Some 10 : int optional
(10, "Hello") : int * string
9
19. 多相型 (Polymorphic Type)
上記の定義において rev の型はどうなっているか?
rev [1;2;3] = [3;2;1] なら rev は int list -> int list として動くが、
文字列のリストを渡しても構わない
let rec rev = function
| [] -> []
| a :: b -> (rev b) @ [a]
rev : 'a list -> 'a list = <fun>
19