`@` 在 elisp 中是什么意思?

What does the `@` mean in elisp?

这很可能是一个愚蠢的问题,但我没有在我读过的 elisp 中遇到 @ 符号,我想知道它是什么意思(前面是 , 以及)在这个 code 中?我在提供我认为合适的搜索短语时遇到了一些困难。

如果 link 腐烂:

(defmacro zenburn-with-color-variables (&rest body)
  "`let' bind all colors defined in `zenburn-colors-alist' around BODY.
Also bind `class' to ((class color) (min-colors 89))."
  (declare (indent 0))
  `(let ((class '((class color) (min-colors 89)))
         ,@(mapcar (lambda (cons)
                     (list (intern (car cons)) (cdr cons)))
                   zenburn-colors-alist))
     ,@body))

这是一个elisp宏定义,它定义了一个模板,用于在编译时被其他代码替换的代码。一个不错的介绍是 Paul Graham 的 On Lisp

的第 7 章

http://www.paulgraham.com/onlisptext.html

通过检查 elisp 手册的索引询问 Emacs:

  • C-hig (elisp) RET
  • @ RET

关注结果:* ,@ (with backquote) [Index]: Backquote. (line 29)

You can also "splice" an evaluated value into the resulting list,
using the special marker ‘,@’.  The elements of the spliced list become
elements at the same level as the other elements of the resulting list.
The equivalent code without using ‘`’ is often unreadable.  Here are
some examples:
[...]