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

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

  • `&rest`允许您定义具有可变数量参数的函数。假设您要定义一个加号功能(加号2 3)和(加号2 3 4)都起作用。该页面有一个很好的解释:http://www.gigamonkeys.com/book/functions.html (2认同)
  • 我认为值得注意的是,这个功能被称为**准引用**或**准引用**。 (2认同)

Umb*_*ndi 6

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

从常见的lisp食谱,解释和一些例子.