Clojure基本语法
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)
如果boolean-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
也可以通过=来判断两个值是否相等:
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