有人可以用简单的术语解释Clojure的不引号拼接吗?

Zub*_*air 43 clojure

我正在撞墙试图理解一些使用非引号拼接的Clojure宏,我似乎无法找到任何需要它们的明显扩展.任何人都可以用虚拟术语向我解释一下吗?

小智 51

我对Clojure的专家,但因为它基本上是一个Lisp的,事情应该是这样的引文结束剪接是所享有其合并列表中使用它的位置.差异看起来像这样:

`(1 2 ~(list 3 4))   =>  (1 2 (3 4))
`(1 2 ~@(list 3 4))  =>  (1 2 3 4)

`  == syntax-quote
~  == unquote
~@ == unquote-splice
Run Code Online (Sandbox Code Playgroud)

  • @Baldur:可能有两个可能的原因.首先,逗号可能被认为不具有描述性和混淆性 - 引用与自然语言完全相同 - 引用符号(用语言术语标记符号),但逗号与语言中的含义完全不同.因此将其更改为其他内容是有意义的.其次,更重要的原因是,为了便于阅读,Clojure允许使用逗号代替空格,因为它有意义,因此不能用作"eval"的快捷方式. (6认同)
  • @Zubair:是的.另请注意,在CLojure中使用`~`(代字号)代替`,`(逗号). (4认同)
  • 啊,那么unquote-splice只会压扁一个列表? (2认同)