在LISP中,反引号意味着什么?

时间:2015-05-10 10:15:58

标签: lisp common-lisp backticks

我有这个宏,它重写了define。如果我删除“`”反引号,它将无效。解释是什么?

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

2 个答案:

答案 0 :(得分:15)

单引号后跟值的书面表示 会产生这个价值:

实施例:     '(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

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

答案 1 :(得分:6)

反引号/反引号禁用对运算符后面的列表前面没有逗号的每个子表达式的评估。

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