Common Lisp:如何引用SBCL中的括号

shi*_*zhz 0 lisp sbcl common-lisp quote

在Common Lisp中,特殊运算符引用使得后面跟未评估的内容一样

(quote a) -> a
(quote {}) -> {}
Run Code Online (Sandbox Code Playgroud)

但为什么表单(quote())给我?我正在使用SBCL 1.2.6,这是我在REPL中得到的:

CL-USER> (quote ())
NIL
Run Code Online (Sandbox Code Playgroud)

关于这个问题的更多信息:这是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)))
Run Code Online (Sandbox Code Playgroud)

当宏扩展为以下代码时:

(define-binary-class id3-tag
    ((major-version)))
Run Code Online (Sandbox Code Playgroud)

(DEFCLASS ID3-TAG NIL
      ((MAJOR-VERSION :INITARG :MAJOR-VERSION :ACCESSOR MAJOR-VERSION)))
Run Code Online (Sandbox Code Playgroud)

在类名ID3-TAG之后是NIL而不是().

Fré*_*idi 7

nil并且()是表达相同概念的两种方式(空列表).

传统上,nil用于强调布尔值"false"而不是空列表,并()以相反的方式使用.

Common LISP HyperSpec :

()['nil],n.用于编写符号的替代符号nil,用于强调使用nil作为空列表.