Plaster
New
List
Login
text
default
anonymous
2021.11.27 09:37:11
(defmacro defclass%% (class-name docstring &rest slots) "Generate a DEFCLASS form with CLASS-NAME and SLOTS with ACCESSOR NAME = CLASS-NAME-SLOT-NAME." (let ((make-symbol (intern (ashok.string:concat "MAKE-" (symbol-name class-name)))) (slot-forms (loop for slot in slots collect (cond ((listp slot) (list (car slot) :accessor (intern (ashok.string:concat (symbol-name class-name) "-" (symbol-name (car slot)))) :initarg (intern (symbol-name (car slot)) "KEYWORD") :initform `',(cdr slot))) (t (list slot :accessor (intern (ashok.string:concat (symbol-name class-name) "-" (symbol-name slot))) :initarg (intern (symbol-name slot) "KEYWORD"))))))) `(progn (defclass ,class-name () ,slot-forms (:documentation ,docstring)) (defmacro ,make-symbol (&rest slot-names) `(make-instance ',',class-name ,@slot-names)))))
Raw
Annotate
Repaste
Edit