Clojureの基礎 〜プロトコル・データ型・レコード〜

今更ながら、Clojureの基礎メモ。
今回は独自型定義周りを。

プロトコル

  • 概要
  • 記法
    • プロトコルの定義:defprotocolマクロ
    • データ型(およびクラス)へのプロトコル追加:extend関数、extend-typeマクロ(少し見易い)、extend-protocolマクロ(複数のクラスへのプロトコル追加を一塊で記述)

データ型

  • 概要
    • Javaのクラスの代替
    • デフォルトで変更不可
    • メソッド定義は、プロトコル(あるいはインタフェース)経由で行う必要がある
  • 記法
    • データ型の定義:deftypeマクロ
    • 無名データ型の定義:reifyマクロ
    • Javaクラスの継承(extends):proxyマクロ
レコード
  • 概要
    • ある特徴をもったデータ型
    • 具体的には、PersistentMapを実装したデータ型、つまり「プロトコルを実装できるマップ」である
    • マップなので、assocおよびupdate-ibで操作できる
    • なお、Clojureでは領域固有の情報はマップでモデリングすることが推奨されているので、そのような場合に用いることができる
  • 記法
    • レコードの定義:defrecordマクロ

参考

プログラミングClojure 第2版

プログラミングClojure 第2版