Clojure学习笔记 - 解构
#!clojure

; 本地绑定
(let [x 1 y 2]
    (+ x y))
;= 3

; 解构
; 支持Clojure的list、vector、seq、map,Java的List,数组,字符串。

; 解构vector
(let [[x y] [1 2]] 
    (+ x y))
;= 3

; 解构字符串
(let [[x y] "12"]
    (str x y))
;= "12"

; map解构
(let [{x :a y :b} {:a 1 :b 2}]
    (+ x y))
;= 3

; 使用_过滤不需要的元素
(let [[x _ y] [1 2 3]]
    (+ x y))
;= 4

; 使用&保持剩下的值
(let [[x & rest] [1 2 3]]
    rest)
;= (2 3)
Clojure学习笔记 - 数据类型
#!clojure
; long(64位带符号整数)
42 ; 十进制
0xff ; 十六进制,0x开头
2r111 ; 任意进制,2r表示二进制,最高支持36进制。
040 ; 八进制,0开头

; double(IEEE标准的64位浮点数)
3.14
6.0221415e23

; clojure.lang.BigInt(任意精度的整数)
42N

; java.math.BigDecimal(任意精度的浮点数)
0.01M

; clojure.lang.Ratio(有理数)
22/7

; 布尔值
true ; 逻辑 true
false ; 逻辑 false

; 空值
nil ; 逻辑 false

; 字符
\c

; Unicode编码字符
\u00ff
;= \ÿ

; Octal编码字符
\o41
;= \!

; 特殊字符
\space
\newline
\formfeed
\return
\backspace
\tab

; 字符串
"string"

; 多行字符串
"multiline
strings"

; 正则表达式
#"[0-9]+" ; #号开头的字符串

; vector
[0 1.2 [\3 "4"]]

; map
{:a 1 2 true "3" [1 2]}

; 单行注释

; #_宏注释
(read-string "(+ 1 2 #_(* 2 2) 8)") 
;= (+ 1 2 8)

; comment宏注释
(when true
    (comment (println "hello")))
;= nil

; 阻止求值
(quote x)
;= x

; 声明变量
(def x 1)

; 代码块
(do
    (+ 1 2)) ; 返回最后一行的值
;= 3

; 声明方法
(defn function-name
    [arguments]
    (...function-body...))

; 解析字符串
(read-string "42")
;= 42

; 生成字符串
(pr-str 42)
;= "42"
Under the Spreading Chestnut Tree

Under the spreading chestnut tree.
I sold you and you sold me.
There lie they, and here lie we.
Under the spreading chestnut tree.

1   2   3   4

Powered By FarBox