[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>
Subject: Different behaviors of evaluator and compiler
Message-ID: <19910821112550.5.KEUNEN@milou.nrb.be>
Character-Type-Mappings: (1 0 (NIL 0) (NIL :ROMAN NIL) "CPTFONT")
          (2 0 (NIL 0) (:FIX :BOLD :NORMAL) "CPTFONTCB")
I came across something I don't understand the reasons...  Can someone
explain why this is so and how to solve this problem?  Thank you.
What I want to do:
I want to make a list of items.  There are lots of them, so I figured
out that I might as well nconc instead of appending to limit the number
of conses (I don't know the items in advance; they are produced by a
loop).  Therefore, I accumulate everything in "result".  If I initialize
result with the empty list ('() or nil), I get an error because I can't
nconc that, which I understand.  So I initialize it with '(nil) because
I don't mind having something at the start of the list (initializing it
with '(anything) gives the same behaviour).
This is a simple function to demonstrate the strange behaviour:
1(defun test ()
  (let ((result '(nil)))
    (loop for item in '(a b c)
	  do (nconc result (list item)))
(test)0 ;when the function definition is evaluated returns
1(NIL A B C)0 ;...which is what I want
1(test)0 ;when the function definition is compiled returns
2Error: Attempt to RPLACD a list that is embedded in a structure and
0       2therefore cannot be RPLACD'ed.  The list is (NIL)
0While in the function SYS:RPLACD-ESCAPE  SYS:*NCONC  TEST
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