タプルとリスト

このページは最後に更新されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

last mod. 2010-05-15 (土) 01:03:14

関数型言語の比較

OCaml

リストは [1; 2; 3; 4] のようにセミコロンで区切ります。 配列もあり、 [| 1; 2; 3; 4 |] で定義します。 camlp4を使っていれば [< '1; '2; '3; '4 >] がストリーム(遅延リスト)となります。ただし、ストリームの扱いはリストなどとはかなり異なります。

リストの構築はx::xsのようにします。::は演算子ではなく、リスト用の特別な文法要素(キーワード)です。

タプルは0, 1のようにカンマで区切ります。 カッコは必須ではありませんが、一般的には混同しやすいので、極めて明確な場合(let a, b = ... のようなコード)を除いてカッコをつけるべき、とされています。

# 1, 2;;
- : int * int = (1, 2)
# let a, b = (1, 2);;
val a : int = 1
val b : int = 2
# [1, 2];;
- : (int * int) list = [(1, 2)]

SML

リストは [1, 2, 3, 4] のようにカンマで区切ります。

リストの構築はOCamlと同様にx::xs のようにします。ただし、::は演算子であり、関数とみなせます。

> op::;
val it = fn : 'a * 'a list -> 'a list

ただし、 SML の演算子は引数をタプルとして受け取るので、部分適用するには fn x => のような書き方が必要となります。

タプルは (1, 2) のようにカッコで括り、カンマで区切ります。OCamlと異なり、カッコは必須となります。

Haskell

リストはSMLと同様に[1, 2, 3, 4] のようにカンマで区切ります。

リストの構築はx:xsのように書くこともできる。:は関数とみなすことができます。

タプルはSMLと同様に(1, 2) のようにカッコで括り、カンマで区切ります。

新規 編集 添付