Clojure 版 アルゴリズムとデータ構造¶
Clojure(JVM 上で動く Lisp 系関数型言語)でアルゴリズムとデータ構造を TDD で学ぶシリーズです。
言語の特徴¶
- JVM: Java と同じ実行環境、Java ライブラリの活用可能
- Lisp 系: S 式によるホモイコニックな構文、マクロによるメタプログラミング
- 不変データ構造:
vector・list・map・setがデフォルトで不変 - 高階関数:
map・filter・reduceによる宣言的なデータ変換 loop/recur: 末尾再帰最適化による効率的な繰り返し処理atom: 可変状態の管理(必要最小限で使用)
章一覧¶
| 章 | タイトル | テスト数 |
|---|---|---|
| 第 1 章 | 基本的なアルゴリズム | 9 |
| 第 2 章 | 配列 | 6 |
| 第 3 章 | 探索アルゴリズム | 4 |
| 第 4 章 | スタックとキュー | 2 |
| 第 5 章 | 再帰アルゴリズム | 4 |
| 第 6 章 | ソートアルゴリズム | 7 |
| 第 7 章 | 文字列処理 | 6 |
| 第 8 章 | リスト | 1 |
| 第 9 章 | 木構造 | 8 |
合計テスト数: 50(204 アサーション)
環境構築¶
nix develop .#clojure
cd apps/clojure
lein test
Python 版・Scala 版との比較¶
| 特徴 | Python | Scala | Clojure |
|---|---|---|---|
| 型システム | 動的型付け | 静的型付け(型推論) | 動的型付け |
| パラダイム | マルチパラダイム | 関数型 + OOP | 関数型(Lisp 系) |
| null 安全 | None | Option[T] |
nil |
| データ構造 | ミュータブル | イミュータブル | イミュータブル |
| ループ | for・while |
for・再帰 |
loop/recur・map・reduce |
| テスト | pytest | ScalaTest | clojure.test |
参考文献¶
- 『新・明解アルゴリズムとデータ構造』 -- 柴田望洋
- 『テスト駆動開発』 -- Kent Beck