在LISP中backtick是什么意思?

在LISP中backtick是什么意思?,lisp,common-lisp,backticks,Lisp,Common Lisp,Backticks,我有一个宏,它重写了define。如果我删除“`”回勾,它将不起作用。原因是什么 (defmacro define ((name &rest r) body) `(defun ,name ,r ,body)) 对于运算符后面的列表,backtick/backquote将禁用对前面没有逗号的每个子表达式的求值 从common lisp cookbook中,.一个单引号,后跟一个值的书面表示形式 将产生这种价值: 例如: "(1 x"foo) 将生成一个打印为(1 x“foo”)的值

我有一个宏,它重写了define。如果我删除“`”回勾,它将不起作用。原因是什么

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

对于运算符后面的列表,backtick/backquote将禁用对前面没有逗号的每个子表达式的求值


从common lisp cookbook中,.

一个单引号,后跟一个值的书面表示形式 将产生这种价值:

例如: "(1 x"foo) 将生成一个打印为
(1 x“foo”)
的值

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

要标记我想要的是
x
的值,而不是符号
x
, 我在
x
之前插入逗号:

'(1 ,x "foo")
它不会像现在那样工作-我现在得到一个值,它有一个文字逗号和一个符号
x
。问题是
quote
不知道逗号约定

Backtick或
backquote
知道逗号约定,因此将给出正确的结果:

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

在这里阅读更多信息:

太好了,我知道了,谢谢。还有一件事。休息前操作员做什么?(&rest)
&rest
允许您定义参数数量可变的函数。假设您想定义一个加号函数,其中(加23)和(加23 4)都起作用。这个页面有一个很好的解释:我认为值得注意的是,这个特性被称为准引用或准引用。