[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Degenerate array axes
What does one mean by (make-array '(0 5)) ? How should it print?
(assuming that *print-array* is non-null)
The description of array printing on page 369 presumes that the array
is either single-dimensional, or else it has some (i.e., not 0) elements.
Notice how the looping part of the algorithm resets an index to 0 (not -1)
in order to try to access the "element" at index <i1 i2 ... 0 ...>.
I've looked a several CL implementations, and all fail to print such
objects in a readable manner. Furthermore, they all print the above
array exactly the same as they do (make-array '(0 10)), even though the
two arrays are not equalp [with *print-array* set to non-null].
It seems clear to me that the algorithm of page 369 does not
provide for a way to distinguish these two arrays, since the
#nA syntax deduces the contents of th dimensions list from
the :initial-contents -- but for arrays of array-total-size equal to
zero, they all have the same "initial contents" even though their
dimensions lists may assume infinitely may values.
Three possible solutions come to mind:
1) simply rule out degenerate axes as being somehow wrong -- the
only zero-element arrays must then be vectors
2) coerce all such beasts into one with all dimensions zero -- e.g.,
treat the '(0 5) and '(0 10) as if they were '(0 0); then a NIL
for the :initial-contents would be acceptable.
3) extend the print syntax of #nA so that it can specify the dimension
list exactly, and independently of the :initial-contents field.
Anyone have any ideas on this one?
-- JonL --