ハツカネズミの恋

Lisp のもろもろ,おぼえがき

Collection in Clojure

Collection

Clojure における Collection とは,coll? 関数を適用した時に logical truth を返すオブジェクトのことだ.

coll?

Clojure では慣習的に,評価結果が Boolean になる関数は語末に "?" を付ける,という規則がある.すなわち coll? の評価値も Boolean だ.では coll? は何をテストして true/false を決定するのか.端的に言えば,coll? は適用先のオブジェクトが IPersistentCollection を実装しているか否かをテストし,していれば true ,していなければ false と評価する.

IPersistentCollection

Clojure では慣習的に,Java interface オブジェクトに対して,名前の頭に"I"を付ける,という規則がある.すなわち,IPersistentCollection も Java Interface だ.ちなみに Java abstract classes オブジェクトに対しては,名前の頭に "A" を付ける.IPersistentCollection には以下の5つの関数が定義されている.

method process
count element の個数を返す
cons element を追加する
empty empty set 相当の定数を返す
equiv collection 同士の同値性をテストする
seq Sequence を返す

Clojure における Collection は以上の5つをサポートしているオブジェクトとして定義される. Collection はサポートしている性質によって,さらに3つに分類される.

class meaning
Associative 連想配列的な key - value のペア
Counted elements の数が O(1) 時間内に求まる
Sequential elements の再帰処理が可能