On Saturday 19 June 2004 17:47, Matthew Danish wrote:
> On Sat, 19 Jun 2004, Heiner Schwarte wrote:
> > I could track down a compiler problem to the following example:
> >
> > (setf *print-circle* T)
> >
> > (defun test()
> >   (declare (optimize (safety 3)))
> >   (let((tmp '(1 2 3 4 5 6 7 8)))
> >     (setf (elt tmp 4) tmp)
> >     (print tmp)
> >     (print (elt tmp 4))))
> > (test)
> >
> > The second print shows 5. If I replace the let-assignment by
> > (let ((tmp nil))(setf tmp ... the problem disappears.
> >
> > Am I missing something? (Linux x86, CMUCL CVS snapshot 2003-11; the same
> > for SBCL 0.8.11)
>
> Yup; you are modifying a literal constant.  My guess is that CMUCL is
> propagating the constant so that the second print is
> (print (elt '(1 2 3 4 5 6 7 8) 4))
>
> Try (list 1 2 3 4 5 6 7 8) instead.

Bingo! Thanks for the prompt response. Heiner


Reply via email to