LISP 中的反引号是什么意思?

What does backtick mean in LISP?

我有这个宏,它重写了define。如果我删除“`”反引号,它将不起作用。怎么解释?

(defmacro define ((name &rest r) body) 
  `(defun ,name ,r ,body))

backtick/backquote 禁用运算符后面的列表的每个不以逗号开头的子表达式的计算。

来自普通的 lisp 食谱,explanation and a few examples

单引号后跟值的书面表示 将产生该值:

示例: '(1 x "foo") 将产生一个打印为 (1 x "foo").

的值

现在假设我不想在列表中使用文字符号 x。 我的程序中有一个变量 x,我想插入 x 绑定的值。

为了标记我想要 x 的值而不是符号 x, 我在 x:

前插入一个逗号
'(1 ,x "foo")

虽然它不会按原样工作 - 我现在得到一个包含文字逗号和符号 x 的值。问题是 quote 不知道逗号约定。

反引号或 backquote 了解逗号约定,因此会给出正确的结果:

> `(1 ,x "foo")
(1 3 "foo")          ; if the value of x is 3

在此处阅读更多内容:http://www.lispworks.com/documentation/HyperSpec/Body/02_df.htm