{prog ;; class graph: { { datatype Container {ContainerC {contents ItemList} {capacity Number}} } { datatype Item {Complex {c Container}} {Atomic {name String} {weight Number}} } { datatype ItemList {Empty} {More {first Item} {rest ItemList}}} } ;; object graph: (ContainerC (More (Atomic "apple" 5) (More (ContainerC (More (Atomic "orange" 8) (Empty)) 8) (Empty))) 5) ;; strategy: {// ContainerC Atomic} ;; visitor: { visitor: totalWeight 0 totalWeight [before Atomic a ...] } }