Ale*_*lex 8 lisp common-lisp backticks
我有这个宏,它重写了define.如果我删除"`"反引号,它将无效.解释是什么?
(defmacro define ((name &rest r) body)
`(defun ,name ,r ,body))
Run Code Online (Sandbox Code Playgroud)
soe*_*ard 16
单引号后跟值的书面表示将产生该值:
示例:'(1 x"foo")将生成一个打印为的值(1 x "foo").
现在假设我不想x在列表中使用文字符号.我的程序中有一个变量x,我想插入值x.
为了标记我想要的值x而不是符号x,我之前插入一个逗号x:
'(1 ,x "foo")
Run Code Online (Sandbox Code Playgroud)
它不会按原样运行 - 我现在得到一个具有文字逗号和符号的值x.问题是quote不了解逗号约定.
反击或backquote了解逗号约定,这将给出正确的结果:
> `(1 ,x "foo")
(1 3 "foo") ; if the value of x is 3
Run Code Online (Sandbox Code Playgroud)
点击此处了解更多信息:http://www.lispworks.com/documentation/HyperSpec/Body/02_df.htm