最近Clojureが気になる
事務所で仕事をしているときはClojureのVideoをよく見る。
http://www.infoq.com/presentations/Value-Identity-State-Rich-Hickey
http://clojure.blip.tv/#989262
4,5年前に関数型プログラムが話題になり出した頃に「The little Schemer」「The Seasoned Schemer」「The Reasoned Schemer」の3部作を読んだ。
1、2作は読みやすかったが、3作目は難解だった。
3作目はSchemeでのロジックプログラミングで説明されていた。
これはこうだ
これはこうだ
だからこうだ
この連続で説明されている。
読んでいるうちに 「だからなんでそうなるんだよ?」と言いたくなるが、最後までそれで貫かれている。
最後の最後にロジックプログラミングで書くためのSchemeのマクロが書かれているが、これがまた難解で挫折してしまった。
(それをScalaで書き直したSampleプログラム「http://scala.sygneca.com/code/mini-kanren」もある)
私が関数型のプログラムに興味をもったのもロジックプログラミングに興味があったからだが、それがSchemeとつながったのが、この3作目の本だった。
その時にJVM上で動くSchemeも試して見ましたが、Lisp系のカッコと独特のキーワードになじめなかった。
ただLispのもつ非常に原理主義的な雰囲気は新鮮なもの(Smalltalk以来)があり、新しいアイディアも沢山発見できた。
特にProgram as dataというのが気に入った。
人によってはプログラムとデータが渾然一体になった形に違和感があるかもしれないが、メタプログラミング好きな人には好まれると思う。
結局その時はScalaを発見(正に発見という感じだった)し、Scalaに没頭した。
それから数年Clojureがでてきた。
Lispのメリットを損なわない範囲でモダンなプログラミング言語に変えた というのがいい。
関数型プログラミング
JVMの上で動きJavaのライブラリが使える
基本がimmutable(状態変化が無い)
非常に高速なコピー(内部構造のデータ管理がツリー構造のようなもの)
などなど
魅力的な仕様が並んでいる。
まだまだ実際にプログラムを書くまでには至ってないが、気になる言語である。
動的な言語が向いている分野で試してみたい。