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 の再帰処理が可能 |