tags
: Clojure, Lisp, Book
第1章 さあ、始めよう
1.1 なぜClojure なのか
S式はXMLやJSONやSQLが本来あるべき姿である
Clojureではコンマは空白文字と同じである
[1, 2, 3, 4]
[1 2 3 4]
ClojureはLispのリストという実装上の構造を シーケンス と呼ばれる抽象構造として一般化した。
シーケンス はリストの力を保ったまま、その力を他のさまざまなデータ構造へと適用可能にしたものだ。
1.2 Clojure を書き始めよう
(+ 1 1 2 3 4)
1.3 Clojure ライブラリの探索
REPLを使ってドキュメントを参照するには doc 関数を使う
(doc str)
REPLを使って名前の一部しかわからないドキュメントを探すには find-doc 関数を使う
(find-doc “reduce”)
1.4 まとめ
第2章 Clojure ひとめぐり
2.1 フォーム
false と nil 以外は、ブール値が必要とされる箇所では真と扱われる
Clojure では空リストは偽ではない
(if () "this is true" "this is false")
Clojure では0は偽ではない
(if 0 "this is true" "this is false")
述語とは、trueかfalseを返す関数。Clojureでは述語の名前は最後に?と付ける慣習になっている
(true? true)
(false? true)
(nil? 0)
(zero? 0.0)
2.2 リーダマクロ
2.3 関数
2.4 var、束縛、名前空間
2.5 Java を呼び出す
2.6 フロー制御
2.7 for ループはどこにある?
2.8 メタデータ
2.9 まとめ
第3章 シーケンスを使ったデータの統合
3.1 すべてはシーケンスである
3.2 シーケンスライブラリを使う
3.3 遅延シーケンスと無限シーケンス
3.4 Java をシーカブルとして扱う
3.5 特定の構造に特化した関数
3.6 まとめ
第4章 関数型プログラミング
4.1 関数型プログラミングの概念
4.2 怠け者になろう
4.3 もっと怠け者の勧め
4.4 再帰ふたたび
4.5 まとめ
第5章 状態
5.1 並行性、並列性、そしてロック
5.2 ref とソフトウェアトランザクショナルメモリ
5.3 アトムを使った非協調的、同期的な更新
5.4 非同期な更新にエージェントを使う
5.5 var でスレッドごとの状態を管理する
5.6 Snake ゲーム
5.7 まとめ
第6章 プロトコルとデータ型
6.1 抽象化へ向けたプログラミング
6.2 インタフェース
6.3 プロトコル
6.4 データ型
6.5 レコード
6.6 reify
6.7 まとめ
第7章 マクロ
7.1 いつマクロを使うべきか
7.2 フロー制御のマクロを書く
7.3 マクロを簡単にする
7.4 マクロの分類学
7.5 まとめ
第8章 マルチメソッド
8.1 マルチメソッドのない暮らし
8.2 マルチメソッドを定義する
8.3 単純なディスパッチの先に
8.4 アドホックに分類を導入する
8.5 いつマルチメソッドを使うべきか
8.6 まとめ
第9章 Java を使い倒す
9.1 例外処理
9.2 整数との闘い
9.3 性能へ向けた最適化
9.4 Clojure でJava のクラスを作る
9.5 実践的な例
9.6 まとめ
第10章 アプリケーションを作る
10.1 Clojurebreaker ゲームのスコア計算
10.2 スコア関数をテストする
10.3 test.generative
10.4 インタフェースを作る
10.5 コードをデプロイする
10.6 お別れ