TL;DR

テキストで書かれたソースコードを読み込み、コンパイラが解釈できるデータ構造に変換する、Clojure の仕組み。

なぜ必要か

Clojure のプログラムは、テキストの文法ではなく、データ構造の評価として定義される。一方で、ほとんどのプログラムはテキストファイルとして書かれる。このテキストを解析してデータ構造を作るのがリーダーの役割である。

仕組み

リーダーはストリームからフォームを読み込み、そのフォームが表すオブジェクトを返す。この処理は read 関数として公開されている。リーダーが読むのは、シンボル、リテラル、リスト、ベクター、マップ、セットなどである。リストは ()、ベクターは []、マップは {}、セットは #{} で書く。

クォート(')、コメント(;)、deref(@)、メタデータ(^)、ディスパッチ(#)、シンタックスクォート(`、~、~@)などは、リーダーマクロとして動く。

リーダーは edn のスーパーセットに対応している。edn に加えて、名前空間付きマップ、タグ付きリテラル、リーダーコンディショナルなどの拡張を持つ。

関連

出典