「Clojure Essentials」

Clojure三部作完結

2014年5月25日に、3冊目の電子書籍「Clojure Essentials」をAmazonで出版しました。305円です300円に改訂しました(切り良く)。関数型プログラミングの基礎知識については、最初の書籍か、「関数型プログラミング概論」を参照して下さい。

日本では「プログラミングClojure(オーム社)」でClojureに入門する人が多いと思います。私もその一人で、すっかりClojureに魅せられてしまいました。ただ私が読んだ第1版は扱っているClojureの仕様が古く、最新の仕様を勉強するには公式サイトの英文を読むしかありませんでした。本書には、その勉強の成果を注ぎ込みました。

とは言え、なにぶんClojure歴は短いので、洞察に富んだコメントができるわけではありません。各機能を冷たく淡々と解説した感じです。それが何の役に立つのかまでは書いてないので、読み手によっては不親切と感じるかもしれません。入門書じゃないことと洋書じゃないことを強調するため副題を付けました。

いまでは「プログラミングClojure」も改訂されたので、最新仕様に追いついたようです(私は読んでませんが)。でもたぶん、Data-readerやTransientコレクションのような機能まではカバーしてないんじゃないかな。

表紙

jacket

今回の表紙猫は、クーちゃんとクロたんです。

kukuro

「はじめに」より抜粋

本書では、なるべく簡潔かつ網羅的にClojureの文法とコア機能を解説しようと試みた。メインターゲットは、既にClojureを使い始めており、もっと勉強したいが英文(公式サイトのドキュメントや洋書)を読むのは面倒、と感じている人たちだ。「やさしいClojure」や「猫でも分かるClojure」ではないので、Clojure初学者が読むには骨が折れるだろう。またClojureはFP(関数型プログラミング)に傾倒した言語だが、本書ではFPの諸概念については解説しない。

もくじ

  1. リテラル(式)
    • アトミックなもの
    • 集合的なもの
    • コレクションの変更
    • sortedとhash
  2. フォームと評価
    • 処理フェーズ
    • マクロ展開の例
    • 評価
    • シンボルの評価
    • リストの評価
    • 特殊フォームの評価
    • 関数呼び出しフォームの評価
    • 評価の抑止
    • 空リスト
    • キーワード
  3. リーダ
    • リーダマクロ
    • クオート
    • コメント
    • メタデータ
    • Varクオート
    • 関数オブジェクト
    • コンストラクタ呼び出し
    • EvalReader(リード時に評価)
    • キーワードの名前空間修飾
    • シンタックスクオートとその仲間
    • Data-reader
  4. プロジェクト構成と起動方法
    • ソースファイルと名前空間
    • 起動(REPL、メイン関数、スクリプト)
    • コンパイル
    • nsマクロ
    • Leiningen
  5. Var
    • Varオブジェクトの静的側面
    • Varオブジェクトの動的側面
    • スレッドローカルなバインディング
    • ダイナミックスコープ(binding)とレキシカルスコープ(let)
    • ローカルなVar
    • Varのメタデータ
  6. 関数
    • fn特殊フォーム
    • defnマクロ
    • 末尾再帰
    • Multimethod
    • みなし関数
  7. シーケンス
    • Lispのリスト
    • Clojureのシーケンス
    • 遅延シーケンス
    • シーケンスの注意
  8. Destructuring
    • シーケンシャルな構造のDestructuring
    • マップ的な構造のDestructuring
    • 応用
  9. マクロ
    • マクロ呼び出し
    • マクロ定義
    • コードはデータで、データはコード
    • シンボルの捕捉
    • アナフォリックマクロ
    • マクロの隠し引数
  10. Java Interop
    • ドット特殊フォーム
    • new特殊フォーム
    • set! 特殊フォーム
    • 使用例
  11. Javaクラスの定義
    • gen-classマクロ
    • インターフェイスの定義
    • プロキシ(無名クラスのインスタンス)
    • 暗黙のインターフェイス
    • Boolean
  12. データ抽象化
    • プロトコル
    • deftypeマクロとdefrecordマクロ
    • StructMap
    • reifyマクロ
    • 既存クラスにプロトコルを実装させる(extend)
  13. リファレンス型と並列処理
    • 共通機能
    • Atom
    • ロック
    • RefとSTM
    • Agent
  14. 非同期処理
    • AgentとSTM
    • Future、Promise、Delay
  15. 標準IO
    • 基本
    • シリアライズ
  16. Assertionと例外処理
  17. Transientコレクション
  18. まだ物足りない?

「あとがき」より抜粋

本書は、筆者としては三作目の電子書籍です。前二作では、Clojureを題材にしつつも、文法については必要最小限しか解説していませんでした。それを補完することが本書の目的です。

執筆にあたり、Clojureの特徴的概念・機能やそれらに欠かせないオペレータをカバーすることを目標にしました。それはリファレンスマニュアルほどフラットで網羅的なものではなく、クックブックほど用途を意識したものでもありません。本書が扱うのは、例えばtrimやinterleaveやreplaceではなく、proxyやdeftypeのようなオペレータです。trimやinterleaveならdoc-stringと数行のサンプルコードを見れば理解できますが、proxyやdeftypeの背後には、関数横断的かつ汎用的な何かがあるように思います。言わば、Clojureのコア機能です。このコア機能が、膨大なClojure標準ライブラリを使いこなすための基盤になると考えています。

正誤表

[2014-06-24] 本書がベースにしているClojureのバージョンは 1.5.1 ですが、実は3月に 1.6.0 が出てたんですね。知りませんでした。1.5.1からの変更点については、こちらの記事に書きました。

余談

あの名著と肩を並べる勢い!?

ranking

Last modified:2014/06/25 00:13:50
Keyword(s):
References:[FP: 関数型プログラミング]
This page is frozen.