【发布时间】:2015-04-30 02:37:25
【问题描述】:
在 Common Lisp 中,特殊运算符 quote 使后面的任何内容都未计算,例如
(quote a) -> a
(quote {}) -> {}
但是为什么表单 (quote ()) 给了我 nil?我正在使用 SBCL 1.2.6,这就是我在 REPL 中得到的:
CL-USER> (quote ())
NIL
关于这个问题的更多信息:这是来自 PCL 第 24 章的一些代码
(defun as-keyword (sym)
(intern (string sym) :keyword))
(defun slot->defclass-slot (spec)
(let ((name (first spec)))
`(,name :initarg ,(as-keyword name) :accessor ,name)))
(defmacro define-binary-class (name slots)
`(defclass ,name ()
,(mapcar #'slot->defclass-slot slots)))
当宏展开为以下代码时:
(define-binary-class id3-tag
((major-version)))
是
(DEFCLASS ID3-TAG NIL
((MAJOR-VERSION :INITARG :MAJOR-VERSION :ACCESSOR MAJOR-VERSION)))
在类名 ID3-TAG 之后是 NIL 而不是 ()。
【问题讨论】:
-
@FrédéricHamidi 谢谢 :) 我以前没有注意到这一点。
-
@FrédéricHamidi 你能添加你的评论作为答案吗?因此可以将其标记为正确答案。谢谢。
标签: lisp common-lisp sbcl quote