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
我有这个宏,它重写了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