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

Different behaviors of evaluator and compiler



    Date: Wed, 21 Aug 91 12:25+0100
    From: Vincent Keunen <keunen@milou.nrb.be>

    ...

    This is a simple function to demonstrate the strange behaviour:
 
    (defun test ()
      (let ((result '(nil)))
	(loop for item in '(a b c)
	      do (nconc result (list item)))
	result))
 
    (test) ;when the function definition is evaluated returns
 
    (NIL A B C) ;...which is what I want
 
    (test) ;when the function definition is compiled returns
 
    1Error: Attempt to RPLACD a list that is embedded in a structure and
0           1therefore cannot be RPLACD'ed.  The list is (NIL)
0    While in the function SYS:RPLACD-ESCAPE  SYS:*NCONC  TEST
 
    1SYS:RPLACD-ESCAPE
0       Arg 0 (CONS): (NIL)
       Arg 1 (SI:X): (A)
    s-A, :    Editor Top Level
    s-B:           Restart process Zmacs Windows
    
 
 
    Can someone help me on this one?
 
    Thank you
 
    Vincent Keunen
    keunen@nrb.be
 
The error reported after the function is compiled has to do with the way
constants are stored in the COMPILED-FUNCTION object.  No doubt, someone
else will send you a more in-depth explanation of why that happens.

One solution is to rewrite the function TEST as such:
	(defun test ()
	  (loop for item in '(a b c)
		collect item))

Hope this helps.

		Craig Lanning <CLanning@PDESDS1.ATG.TRC.SCRA.ORG>