1 (in-package :lisp-on-lines
)
4 (define-layered-class list-attribute
(define-description-attribute)
5 ((item-args :initform nil
:initarg
:item
:layered t
:special t
)))
7 (define-layered-method display-attribute-value
8 ((attribute list-attribute
))
9 (generic-format *display
* "(")
10 (let ((list (attribute-value attribute
)))
14 :do
(let ((item (first cons
16 (dletf (((attribute-object attribute
) item
))
17 (apply #'display
*display
* item
(slot-value attribute
'item-args
))
18 (unless (endp (cdr cons
))
19 (generic-format *display
* " "))))))
20 (generic-format *display
* ")"))
27 (define-description list
()
28 ((list :attribute-class list-attribute
32 (define-description cons
(list)
33 ((car :label
"First" :function
#'car
)
34 (cdr :label
"Rest" :function
#'cdr
)
37 (define-description cons
()
38 ((editp :value t
:editp nil
)
39 (car :setter
#'rplaca
)
40 (cdr :setter
#'rplacd
))
41 (:in-description editable
))
43 (define-description cons
()
44 ((active-attributes :value
'(list)))
45 (:in-description inline
))
47 (define-layered-method description-of
((c cons
))
48 (find-description 'cons
))