SRFI 231 and empty arrays Bradley J Lucier 31 Mar 2026 16:08 UTC

The reference to SRFI 213 should be to SRFI 231.

The specification might be ambiguous for empty arrays.  These examples for array->list* are from SRFI 231:
=========================
If array is zero dimensional, then array->list* returns ((array-getter array)). If the argument is an empty array, then the nested lists of the result match the first nonzero dimensions (if any). For example:
(array->list* (make-array (make-interval '#()) (lambda () 2))) => 2 ;; no list
(array->list* (make-array (make-interval '#(0)) error)) => '()
(array->list* (make-array (make-interval '#(0 0)) error)) => '()
(array->list* (make-array (make-interval '#(2 0)) error)) => '(() ())
(array->list* (make-array (make-interval '#(0 2)) error)) => ‘()
=========================
The examples for list*->array are
=========================
Empty and zero-dimensional lists are treated differently; see the discussion for array->list*. For example
(list*->array 0 '()) => An array for which ((array-getter (list*->array 0 '()))) => '()
(list*->array 1 '()) => An empty array with domain (make-interval '#(0))
(list*->array 2 '()) => An empty array with domain (make-interval '#(0 0))
(list*->array 2 '(() ())) => An empty array with domain (make-interval '#(2 0))
=========================
list*->array has no way to create an array with lower bounds ‘#(0 0) and upper bounds ‘#(0 2). (You can do that with list->array, which specifies the interval, not just the dimension.)

In your notation, how would you specify an empty array literal with lower bounds ‘#(0 0) and upper bounds ‘#(0 2)?

I agree with Per Bothner that a formal grammar would be helpful.

Brad