Clojure のコードはフォームという単位で処理される。以下の様な種類がある。

フォーム 用途
Nil nil 値が存在しないことを表現する
ブール値 true, false ブール値の表現
数値 1, 2/5, 0.4 数値の表現
文字 \a Java の文字そのもの
文字列 “abc” Javaの文字列そのもの
キーワード :key 評価されると自分自身を返す。主にマップのキーとして使う。
シンボル +, str, java.lang.String ものの命名(関数、演算子、Javaクラス など)
リスト (1 2 3), (str “abc” “def”) データ構造の表現
ベクタ [1 2 3] 一続きの整数値で索引付けしてあるデータ構造
マップ {:type “Dog” :name “Taro”} キーと値のペアを表現するためのデータ構造
セット #{:Bob :Tom :Hickey} 集合を表現するためのデータ構造

Clojure は基本的なフォーム以外にリーダマクロと呼ばれる構文も認識する。

リーダマクロ 用途
クオート ‘form => (quote form) formを評価せずそのまま返す
構文クオート `q マクロで使用
アンクオート ~ マクロで使用
スプライシングアンクオート ~@ マクロで使用
varクオート #’q => (var q) var そのものを返す
無名関数 #(.toUpperCase %) 無名関数を定義する
コメント ; this is comment コメントの記入
参照外し @form => (deref form) 参照(ref)で定義したオブジェクトの中身を読み出す
メタデータ ^m form メタデータを付加する際に用いる
正規表現パターン #”pattern” Javaの java.util.regex.Patern オブジェクトを生成