# , ` 是什么意思,不懂

关于这个问题,我另起了一个主题[elisp 符号表 与 namespace]

关于本主题

为了使记号简洁,lisp 中有一个特殊的宏‘,称为 backquote。在这个宏里,所有的表达式都是引用(quote)的,如果要让一个表达式不被直接引用(也就是列表中要计算该表达式的值),需要在前面加 “,”,如果要让一个列表作为整个列表的一部分,可以用“,@”把它展开。

'(a list of ,(+ 2 3) elements) ; => (a list of 5 elements) 
(setq some-list ’(2 3))        ; => (2 3) 
'(1 ,some-list 4 ,@some-list)  ; => (1 (2 3) 4 2 3)

提个问题

(defmacro when (cond &rest body)
  (list 'if cond (cons 'progn body)))

; 按理说,是可以替换成
(defmacro when (cond &rest body)
  '(if ,cond (progn ,@body)))

; 但提示下面错误
Error running timer 'aggressive-indent--indent-if-changed': (void-function \,)
; 找不到名字为"\,"的函数