読者です 読者をやめる 読者になる 読者になる

OCaml 一人勉強会 #1 レコード型

ocaml erlang

OCaml を少しずつ勉強していますが、関数型は難しいです。
少しでも OCaml の文法を理解して、OCamlソースコードが読めるようになれるといいなと思っています。

環境

OS
Mac OS X 10.6.1
OCaml
3.11.1 64 bit
Erlang
R13B02-1 64 bit

レコード型

レコード型はどこにでもあるようで、OCaml にもありました。

OCaml

# type student = {name : string; id : int};;
type student = { name : string; id : int; }
# let st1 = {name = "Taro Yamada"; id = 123456};;
val st1 : student = {name = "Taro Yamada"; id = 123456}
# st1.name;;
- : string = "Taro Yamada"
# let st2 = {st1 with id = 123};;
val st2 : student = {name = "Taro Yamada"; id = 123}

Erlang

1> rd(student, {name, id}).
student
2> St1 = #student{name = "Taro Yamada", id = 123456}.
#student{name = "Taro Yamada",id = 123456}
3> St1#student.name.
"Taro Yamada"
4> St2 = St1#student{id = 123}.
#student{name = "Taro Yamada",id = 123}

それにしても ErlangOCaml の比較コード見せられて嬉しい人っているのかな。
ちなみに、OCaml はわかりませんが Erlang のレコードは Tuple の Syntax Sugar ですので、ガンガン使いましょう。

Erlang のレコード

インタプリタとコンパイルで書き方が代わるという微妙なしろものです。

コンパイルだとこう書けます。
Erlang

-record(student, {name :: string(), id :: integer()}).