1 变量

1.1 全局变量

全局变量的作用域为当其所在的命名空间 (def var-name var-value)

1.2 局部变量

(let [a b] (expression))

2 引用(quote)或'

对于不想要进行求值的表达式,可以使用(quote xxx)或者前面加个'

3 语法引用(Syntax-quote)或`

同样表示不要对表达式进行求值.
但是还有两点不同
把无命名空间限定的符号求值为全命名空间的符号:

  1. 如果符号已经被声明, 那么求值为对应命名空间
  2. 如果未被声明, 求值为当前命名空间
(in-ns 'test)
;; 如果ha已经在其他命名空间中声明, 结果为被声明空间/ha
;; 否则为当前命名空间/ha
`ha

允许 反引用 , 即在语引用的表达式中, 可以选择性地使用反引用对某一部分进行求值

4 反引用(~)

反引用只能使用在语法引用中, 代表要对其后的表达式求值.

(def ha "haha")
;;`代表不要对表达式求值, ~代表对表达式求值, 'ha计算后为(quote ha), ~对(quote ha)求值得到ha
;; 因此 最终结果为 (ha ha)
`(当前命名空间/ha ~'ha)

5 splicing unquote(~@)

~@ inserts the values of a sequence consecutively into a parent sequence