第一に何よりもまず、Clojureは動的だ。それは、Clojureのプログラムはただコンパイルして実行するものではなく相互作用することが可能なものだということを意味する。Clojureは言語抽象ではなく環境であり、そこではほとんどすべての言語構造は具象化(reify)されているため、調べたり変更したりすることができる。これはプログラムを実行してその結果(または失敗)を調べてやり直すのとは大きく異なる体験につながる。とりわけ、データをロードし、機能を追加し、バグを修正し、テストをする、途切れることのない流れの中でプログラムを成長させていくことができる。

REPL

ClojureはJavaアプリケーションに組み込んだりスクリプト言語として利用したりすることもできるが、主要なプログラミングインターフェースはRead-Eval-Print-Loop(REPL)だ。これはコマンドを入力して実行し、結果を調べることができるシンプルなコンソールインターフェースだ。次のようにClojure 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でロードしたものは何でも直ちに自動的にJVMのバイトコードにコンパイルされる。事前にコンパイルすることも可能だが、必須ではない。