This page is part of the web mail archives of SRFI 25 from before July 7th, 2015. The new archives for SRFI 25 contain all messages, not just those from before July 7th, 2015.
Jussi Piitulainen wrote:
If both (vector? arr) and (array? arr) yield #t, then (vector-ref arr k) must do what (array-ref arr k) does, and so on. To implement that, one should first have disjoint types, (r5rs-vector? o) and (array? o), and then make (vector? o) be their sum (or (r5rs-vector? o) (array? o)), and (vector-ref o k) would dispatch to one of (r5rs-vector-ref o k) or (array-ref o k).
Not sure what you mean, but it sounds wrong. Instead we should follow logic and Common Lisp (or at least let implementations have that option): (vector? obj) should imply (array? obj). The reverse would be true if you take the view that arrays are nested vectors, but that runs into problems inde-generative cases of a 0-rank array. It also is difficult to distinguish a
0*M array from a 0*N array since you can't really distinguish a 0-length vector each of whose non-existent elements is an M-length vectors from a0-length vector of N-length vectors. That is unless you can associate "types" with empty vectors. Some APL dialects to that, and it gets a little strange.