From: Torkel Holm
Subject: Recursive describe-object
Date: 
Message-ID: <86is78g40a.fsf@rikse.ii.uib.no>
How are you dealin with recursive structures
likes this with DESCRIBE-OBJECT?

(defclass node () 
  ((name :initform 'default-name :initarg :name :reader node-name)
   (data :initform 'default-data :initarg :data :reader node-data)))

(defclass composite (node)
  ((children :initform nil :initarg :children :accessor composite-children))) 

(defclass leaf (node) ())

(defmethod describe-object ((obj node) stream)
  (format stream "~&~A" obj)
  (format stream "~&Name:~A" (node-name obj))
  (format stream "~&Data:~A" (node-data obj)))

(defmethod describe-object :after ((obj composite) stream)
  (loop for x in (composite-children obj)
     do (describe x)))

(describe 
 (make-instance 'composite
                :name 'outer-composite
                :data 'outer-composite-data
                :children 
                (list 
                 (make-instance 'composite 
                                :name 'inner-composite
                                :data 'inner-composite-data
                                :children 
                                (list (make-instance 'leaf :name 'foo 
                                                     :data 'foo-data)))
                 (make-instance 'leaf :name 'bar :data 'bar-data))))
=> 

#<COMPOSITE>
Name:OUTER-COMPOSITE
#<COMPOSITE>
Name:INNER-COMPOSITE
#<LEAF>
Name:FOO
Data:FOO-DATAData:INNER-COMPOSITE-DATA
#<LEAF>
Name:BAR
Data:BAR-DATAData:OUTER-COMPOSITE-DATA

It doesnt look too good on ACL ;)

-- 
Torkel Holm
From: Coby Beck
Subject: Re: Recursive describe-object
Date: 
Message-ID: <1RFud.53322$6f6.27349@edtnps89>
"Torkel Holm" <······@ii.uib.no> wrote in message 
···················@rikse.ii.uib.no...
>
> How are you dealin with recursive structures
> likes this with DESCRIBE-OBJECT?

[snip]

> It doesnt look too good on ACL ;)

ACL has very good INSPECT features, you would probably be better off using 
those.

-- 
Coby Beck
(remove #\Space "coby 101 @ big pond . com")