3. フォーム
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 オブジェクトを生成 |