mutable-array setter vs SRFI-17
Per Bothner 27 Sep 2015 04:33 UTC
In this letter I'll rename the specification of mutable-array to avoid confusion, to:
(mutable-array domain get-proc set-proc)
The "standard" Scheme argument-order for a "set-proc" is to have the new value *last*.
E.g. (vector-set! vec index new-value). That is why SRFI-17 defines:
(set! (proc arg ...) value)
as
((setter proc) arg ... value)
The setter procedure passed to mutable-array has the order:
(setter value i1 ... in)
I think it should be:
(setter i1 ... in value)
That would allow:
set-proc == (setter get-proc)
Of course the downside of that is that you can't use a "rest" argument to
writer the setter:
(lambda (value . indexes) ...)
This issue is discussed in SRFI-17.
We can "have the best of both" by changing the get-proc to
take a single vector-valued argument:
(get-proc (vector i1 ... in))
(set-proc (vector i1 ... in) value)
One really wants to be using a vector of indexes rather than a list
of indexes. And preferably a uniform fixnum vector.
Note that SRFI-25 has:
(array-set! array k ... value)
SRFI-25 also allows array indexes:
(array-ref array indexes)
(array-set! array indexes value)
where indexes is a vector or a rank-1 array.
These variants would be the lower-level one, that would call the
mutable-array get-proc and set-proc. The variable-length array-ref
and array-set! would be convenience methods that call the vector-based ones.
--
--Per Bothner
xxxxxx@bothner.com http://per.bothner.com/