В Common Lisp, специальный оператор цитата делает все, а затем, убрав оценивали, какCommon Lisp: Как процитировать Parenthèse в SBCL
(quote a) -> a
(quote {}) -> {}
Но почему форма (цитата()) дает мне nil? Я использую SBCL 1.2.6 и это то, что я получил в РЕПЛ:
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)))
который NIL, а не () после имени класса ID3-TAG.
@ FrédéricHamidi Спасибо :) Я этого раньше не заметил. – shizhz
@ FrédéricHamidi Не могли бы вы добавить свой комментарий в качестве ответа, пожалуйста? Поэтому он может быть отмечен как правильный ответ. Спасибо. –