(in-package :lisp-on-lines)
-(define-description cons ()
+
+(define-layered-class list-attribute (define-description-attribute)
+ ((item-args :initform nil :initarg :item :layered t :special t)))
+
+(define-layered-method display-attribute-value
+ ((attribute list-attribute))
+ (generic-format *display* "(")
+ (let ((list (attribute-value attribute)))
+
+ (loop
+ :for cons :on list
+ :do (let ((item (first cons
+)))
+ (dletf (((attribute-object attribute) item))
+ (apply #'display *display* item (slot-value attribute 'item-args))
+ (unless (endp (cdr cons))
+ (generic-format *display* " "))))))
+ (generic-format *display* ")"))
+
+
+
+
+
+
+(define-description list ()
+ ((list :attribute-class list-attribute
+ :function #'identity
+ :attributes nil)))
+
+(define-description cons (list)
((car :label "First" :function #'car)
- (cdr :label "Rest" :function #'cdr)))
+ (cdr :label "Rest" :function #'cdr)
+ ))
(define-description cons ()
((editp :value t :editp nil)
(cdr :setter #'rplacd))
(:in-description editable))
+(define-description cons ()
+ ((active-attributes :value '(list)))
+ (:in-description inline))
+
(define-layered-method description-of ((c cons))
(find-description 'cons))