Вы можете попробовать :reader
или :accessor
.
Выполнение
(defclass some-class ()
((some-slot
:initarg :somearg :reader some-slot
:initform (error ":somearg not specified"))))
должно позволить вам переписать строки с 11 по 13 как
(princ (remove-duplicates *delta* :test #'equal :key #'some-slot))
То есть (some-slot x)
эквивалентно (slot-value x 'some-slot)
, если в соответствующем слоте есть считыватель / аксессор.
Редактирование после сна:
Вам также не нужнопотрудиться установить :initform
на ошибку;слот будет делать это по умолчанию, если вы не укажете значение по умолчанию и кто-то попытается его прочитать.Если вы не хотите получить ошибку, вы делаете что-то вроде :initform nil
.Посмотрите этот превосходный учебник CLOS , а также главы 16 и 17 Практического общего лиспа для получения дополнительной информации об объектах в Common Lisp.
Кроме того, в будущем, еслиу вас есть рабочий код, который вы хотели бы получить совет по стилю, проверьте codereview.stackexchange .Есть небольшое, но активное население рецензентов Lisp.