基本構文
3つの基本についてまとめています
- リテラル
- 関数の定義と呼び出し
- 特殊フォーム
3. 特殊フォーム についてまとめています
昨日はdef
についてまとめたので、今日は続きから書いていきます
2. 特殊フォーム
特殊フォーム(Special forms)は、Clojureコンパイラによって直接解釈されます
if
(if test then else?)
test
の評価が真の場合、then
が評価され、else
が定義されている場合は、else
が評価され、定義されていないときは nil
を返す
(if true ;test
"Trueの場合" ;then
"Falseの場合") ;else?
;; => Trueの場合
do
(do 式1 式2 式3 ... 式N)
渡された式を左から順に評価され、最後の式の評価結果が全体の結果となる
(do
(println "Hello,")
(println "World")
(+ 1 2))
;; => 3
ここでは、2つの println
は標準出力はされますが(副作用)、最後の(+ 1 2)
の結果の3
が返されます
let
(let [ binding* ] expr*)
let
はローカルなスコープで変数を設定するために使用される構文です。
(let
[x 1]
(+ x 2))
ここでは、x
という名前に1
を割り当て、(+ x 2)
で、1 + 2
をしています
quote
(quote form)
; 短縮記法
'(form)
quote
は、form
を評価せずにそのまま返します
これによって、コードをデータとして扱うことができます
(quote (+ 1 1))
; (+ 1 1)
'(+ 1 1)
; (+ 1 1)
var
(var symbol)
指定されたシンボルのvar
を返します
(def x 42)
(var x)
; #'todo.core/x