列表声明中的Clojure列表

时间:2016-07-21 22:52:05

标签: list syntax clojure

我试图在Clojure中列出一个列表。

Expected behavior: `(`()) => (())
Actual behavior:   `(`()) => ((clojure.core/list))

输出是什么意思?

另外,我想了解下面的行为是否一致。

`()     => ()
`("hi") => ("hi")
`(`())  => ((clojure.core/list))

与我的问题无关,这是一段实际返回(())的代码段:

(conj `() `())

1 个答案:

答案 0 :(得分:2)

基本上,不要嵌套引号。我将在这里使用基本的quote特殊表单,但同样的概念也适用于更复杂的语法引用。

当你这样写:

'()
;;=> ()

完全相同

(quote ())
;;=> ()

所以当你这样写:

'('())
;;=> ((quote ()))

这和写这个一样:

(quote ((quote ())))
;;=> ((quote ()))

你可以做的一件事就是引用最外面的列表:

'(())
;;=> (())

或者你可以使用list函数,这是一个更通用的解决方案:

(list)
;;=> ()

(list "hi")
;;=> ("hi")

(list (list))
;;=> (())

(list 1 (+ 1 1) 3)
;;=> (1 2 3)