ハローClojure-Synttax

2544 ワード

Clojureの文法はとても簡単で、Lispを熟知すれば、ほとんどシームレスにClojureを使うことができます.
Form
Clojureのコードは一つのformから構成されています.formは基本的なデータ構造であり、例えばnumber、stringなどもoperationであり、一つのoperationにとって合法的な構造は以下の通りです.
(operator operand1 operand2 ... operandn)
最初はoperatorで、後はこのoperatorのパラメータです.例えば(+ 1 2 3)、operatorは「+」です.そしてパラメータは1、2、3です.このformを実行すれば、結果は6です.
Control Flow
Clojureのcontrol flowはif、doとwhenを含みます.
If
Ifのフォーマットは以下の通りです
(if boolean-form
    then-form
    optional-else-form)
bootlean-formがtrueであれば、then-formを実行します.さもなければ、optional-else-formを実行します.いくつかの例:
user=> (if false "hello" "world")
"world"
user=> (if true "hello" "world")
"hello"
user=> (if true "hello")
"hello"
user=> (if false "hello")
nil
Do
上のifを通じて見れば、私達のthenまたはelseはformしかないですが、時々、この条件の下で複数のformを実行する必要があります.この時はdoが必要です.
user=> (if true
  #_=> (do (println "true") "hello")
  #_=> (do (println "false") "world"))
true
"hello"
上記の例では、doを使って複数のformをカプセル化しましたが、trueであれば、まずtrueを印刷して、その後「hello」という値に戻ります.
When
Whenはifとdoの組み合わせに似ていますが、elseという分岐はありません.
user=> (when true
  #_=> (println "true")
  #_=> (+ 1 2))
true
3
nil,true,false
Clojureはnilとfalseを使って論理休暇を表しますが、他のすべての値は論理真です.例えば、
user=> (if nil "hello" "world")
"world"
user=> (if "" "hello" "world")
"hello"
user=> (if 0 "hello" "world")
"hello"
user=> (if true "hello" "world")
"hello"
user=> (if false "hello" "world")
"world"
私たちはnil?を通して一つの値がnilかどうかを判断できます.例えば、
user=> (nil? nil)
true
user=> (nil? false)
false
user=> (nil? true)
false
2つの値が等しいかどうかは、=によって判定されてもよい.
user=> (= 1 1)
true
user=> (= 1 2)
false
user=> (= nil false)
false
user=> (= false false)
true
私達もandとorを通じてブール演算を行うことができます.orは一番目のtrueのデータを返します.もしないなら最後のデータを返します.そしてandは一番目のfalseのデータを返します.もしtrueであれば、最後のtrueのデータを返します.例えば:
user=> (or nil 1)
1
user=> (or nil false)
false
user=> (and nil false)
nil
user=> (and 1 false 2)
false
user=> (and 1 2)
2
def
私たちはdefを通じて一つの変数を命名できます.あとで使うのに便利です.例えば、
user=> (def a [1 2 3])
#'user/a
user=> (get a 1)
2