OCaml一人勉強会 - タプル、リスト、その他コンテナ

Ocaml関数型言語らしいです。関数型言語といえばタプルです(違います)。ということでタプル。

# (1, "hoge", 'a');;
- : int * string * char = (1, "hoge", 'a')
# 1, "hoge", 'a';;
- : int * string * char = (1, "hoge", 'a')

ふむふむ。括弧省略できる。まあゴルフ以外ではする意味ないしゴルフではタプル使わない気がする。
関数型言語といえばリスト略。

# [1; 2; 3;];;
- : int list = [1; 2; 3]

これは明らかに括弧省略無理(違う意味になるのは目に見えている)。
うっかり他の言語などでよく見られる「[a,b,c]」のような形で書いてしまうと…

# [1, 2, 3];;
- : (int * int * int) list = [(1, 2, 3)]

タプルのリストになってしまうのだ!大変だ!
ちゃんと手続き脳の大好きな配列もあるよ。

# [|1; 2; 3|];;
- : int array = [|1; 2; 3|]

リストと配列の違いはまあデータ構造とか勉強してれば分かるよね!まあ他の言語と一緒。

  • リストは append とかが O(1) で強い。at(N) みたいなのは O(N) で弱い。
  • 配列は append とかが O(N) で弱い。at(N) みたいなのは O(1) で強い。

でまあ他にも標準ライブラリにはコンテナとして、Hashtbl とか Set とか Map とか Queue とか Stack とか必要な物は一通りある。Buffer とかいうICFPC2007に向いてそうな文字列のコンテナもある。まあこれらは追々。