我试图在Clojure中列出一个列表。
Expected behavior: `(`()) => (())
Actual behavior: `(`()) => ((clojure.core/list))
输出是什么意思?
另外,我想了解下面的行为是否一致。
`() => ()
`("hi") => ("hi")
`(`()) => ((clojure.core/list))
与我的问题无关,这是一段实际返回(())
的代码段:
(conj `() `())
答案 0 :(得分:2)
基本上,不要嵌套引号。我将在这里使用基本的quote
特殊表单,但同样的概念也适用于更复杂的语法引用。
当你这样写:
'()
;;=> ()
与完全相同:
(quote ())
;;=> ()
所以当你这样写:
'('())
;;=> ((quote ()))
这和写这个一样:
(quote ((quote ())))
;;=> ((quote ()))
你可以做的一件事就是引用最外面的列表:
'(())
;;=> (())
或者你可以使用list
函数,这是一个更通用的解决方案:
(list)
;;=> ()
(list "hi")
;;=> ("hi")
(list (list))
;;=> (())
(list 1 (+ 1 1) 3)
;;=> (1 2 3)