まず何よりも、Clojureは動的だ。つまりClojureのプログラムは、コンパイルして実行するようなものではなく、やりとりをしつつ進めるものだ。Clojureは言語として定義されただけのものではなく環境であり、言語のすべてがそこにあり、いじったり変更したりすることができる。これまで多くの読者が慣れ親しんできたであろうプログラムを実行して出力を確認し(誤りを見つけ)プログラムを修正するという流れとは、大きく違う体験になるはずだ。Clojureでは、データを読み込み機能を追加しバグを直しテストするといった一連の作業を流れるように行いながらプログラムを成長させることになる。
ClojureはJavaアプリケーションに組み込むこともでき、スクリプト言語として使うこともできるが、第一のプログラミング環境は読み込み-評価-出力-ループ (REPL; Read-Eval-Print-Loop)だ。これはシンプルなコンソール・インターフェースで、命令を入力・実行し、出力を確認できる。以下のように入力するとCojure REPLが開始できるので、この文書に書かれた機能ツアーを読み進めて欲しい。
java -cp clojure.jar clojure.mainと実行すると以下のようなプロンプトが表示される。
user=>
多くのClojure命令は(命令 引数*)
という形になる。例えば
(def x 6) -> #'user/x (def y 36) -> #'user/y (+ x y) -> 42
Clojureには任意精度の整数、文字列、分数、浮動小数点数、文字、シンボル、キーワードがある。
(* 12345678 12345678) -> 152415765279684 "string" -> "string" 22/7 -> 22/7 3.14159 -> 3.14159 \a -> \a 'symbol -> symbol :keyword -> :keyword ;a comment
Clojureはコンパイル言語なのだが、ユーザーがいつコンパイラを実行するのか知りたいのではないだろうか。実はコンパイラを改めて実行する必要はない。REPLに入力されたものやload-file
命令で読み込まれたものは自動的にJavaVMバイトコードに変換される。もちろん読み込む前にコンパイルしておくことも可能だ。