2013年2月7日木曜日

Destructuringを使おう

Clojureで積極的にDestructuringを使っていこうという話です。

ListやVectorに対する再帰


例: index-of


Destructuringを使うとこんな感じで書ける。


firstとrestがなくなりました。

例: end


Destructuringは関数の引数部に直接書ける。


リスト全体を束縛する変数を省略出来ました。

MapやRecordに対するDestructuring


レコードに対する操作


例: abs


Destructuringを使うとこんな感じ。


{:keys [foo bar ...]}はフィールドを列挙することでその値を束縛します。

例: add


フィールドと違った名前の変数名を付ける場合は{foo' :foo bar' :bar ...}という記法が使えます。


Destructuringを使うことで要素の取得、束縛を簡素にしませんか?

2013年2月2日土曜日

Clojureで継承みたいなナニカ

Clojureのdeftypeやdefrecordではinterfaceのみを実装することができます。
しかし、継承のように実装があるclassを継承したいときがあります。

例えばこんなコードがあります。


ConsとNilのaddとemptyの実装が同じです。
共通化したい。

とりあえず、addとemptyを別Protocolに。


ListというProtocolを作って、それに対するAdderを定義します。


ConsとNilに対してListを実装すれば、めでたしめでたし。