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

adjust-array with :initial-elements and fill pointers



    Date: Fri, 22 Nov 85 10:36 EST
    From: Daniel L. Weinreb <DLW@SCRC-QUABBIN.ARPA>

    Consider the following forms:

      (setq a (make-array 5 :fill-pointer 3))
      (adjust-array a 7 :initial-element 'b)

    What should happen?  On page 297, it says "The elements of the new array
    that are not in the bounds of array are initalized to the
    :initial-element".  The question is whether the elements that follow the
    fill pointer are considered to be within the "bounds of the array".  The
    sentence on page 295, "Nearly all functions that operate on the contents
    of a vector will operate only on the active elements", is what makes
    this issue less than perfectly clear.

    Our recommendation is that the entire new array be initialized, despite
    the presence of the fill pointer, and that adjust-array be clearly
    designated as one of the exceptions to the "nearly all" phrase.

Given:

  (setq a (make-array 5 :fill-pointer 3))
  (setf (aref a 0) 'x)
  (setf (aref a 2) 'z)
  (adjust-array a 7 :initial-element 'b)

Which of the following are you proposing:

  1.  A = [ X ? Z ? ? B B ]
  2.  A = [ X ? Z B B B B ]
  3.  A = [ X B Z B B B B ]
  4.  A = [ B B B B B B B ]
  5.  Other (please specify)

CLtL doesn't seem to say what happens to the fill pointer if there was no fill 
pointer specified in the ADJUST-ARRAY call but there was one specified to 
MAKE-ARRAY. I assume the implication is that the fill pointer remains 3. (GLS 
or Scott should correct me if I'm wrong). DLW, I am not clear on whether you 
are suggesting that it it be reset (ie, that it be the same as specifying 
:FILL-POINTER NIL or :FILL-POINTER T). Can you elaborate?

I would be curious to hear an elaboration of your motivation. In my mind, there
are reasons for believing any of these are reasonable -- depending on the 
application, which suggests to me that finer control (ie, more keywords) rather
than some arbitrary decision may be the really right thing. Of course, the 
default must be clarified in any case.