[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[no subject]

; The following illustrates the problem I am encountering with #n= in
; output.  Because the call to write calls the format in the defstruct
; print routine, the #n= count is reset between defstruct prints, resulting
; in both structures using #0= to define their shared substructure and making
; it impossible to read the list back in.
; This is apparently a shortcoming of the original definition of CL. Page
; 559 of CLtLII alludes to the problem.
; Jon.

(defstruct  (sister-ship (:print-function print-sister-ship)) class members )

(defstruct (ship) hms )

(defun print-sister-ship (x stream depth)
  (format stream 
	  "#s(sister-ship class ~s members ~s)"
	  (sister-ship-class x)
	  (sister-ship-members x)))

(defun bug ()
  (setf x (make-ship :hms 'santa-maria))
  (write `(
	   ,(make-sister-ship :class 'nina
			      :members `(,(symbol-value 'x),(symbol-value 'x)))
	   ,(make-sister-ship :class 'pinta
			      :members `(,(symbol-value 'x),(symbol-value 'x))))
	 :stream (open "bug" :direction :output)
	 :escape t
	 :circle t
	 :pretty t))