miscellaneous Taylor R Campbell (18 Sep 2009 15:49 UTC)
Re: miscellaneous David Van Horn (18 Sep 2009 17:07 UTC)
Re: miscellaneous Taylor R Campbell (18 Sep 2009 17:15 UTC)
Re: miscellaneous David Van Horn (18 Sep 2009 19:52 UTC)
Re: miscellaneous Taylor R Campbell (18 Sep 2009 20:07 UTC)
Re: miscellaneous David Van Horn (18 Sep 2009 20:40 UTC)

Re: miscellaneous David Van Horn 18 Sep 2009 17:07 UTC

Taylor R Campbell wrote:
> I haven't scrutinized it thoroughly, but this SRFI looks very nice.
> Some of the formatting is a little confusing: the prototypes are not
> very clearly distinguished from the other text; perhaps it could be
> indented differently, and the word `procedure' could precede the
> prototype or be right-justifed:
>
> procedure: (car /pair/)
> or
> (car /pair/)                                      procedure
>
>   Returns the contents of the car field of /pair/.

I agree the formatting could be improved.  I will try to address this in
the next revision.

> LIST-REF/UPDATE is sometimes overkill -- perhaps an operation just to
> modify the element at a particular index would be worth adding, say
> (LIST-MODIFY <list> <index> <procedure>), which would return just the
> new list with the element E at <index> replaced by (<procedure> E).

I added `list-ref/update', even though `list-ref' and `list-set' are
sufficient.  This operation generalizes both ref & set and the
`list-modify' (I would call it list-update) operation you propose.  The
reason for this is purely concerns of efficiency.  All are implementable
in terms of set & ref in O(log n) total time, but `list-ref/update'
needs to make a single access of the appropriate element in the list.

> Since random-access lists are (or at least may be, in general)
> incompatible with sequential lists, if you have written code to use
> SRFI 101, how do you use rest lists in n-ary procedures, and APPLY,
> or, more generally, how do you use code that expects sequential lists?
> This will be important to address for anyone to actually use
> random-access lists.

Just so there is no confusion:  random-access lists are not incompatible
with sequential lists in the sense that one has to commit to use
random-access lists to the exclusions of traditional lists.  It is
expected that programs may make use of *both* data types in the same
program (via prefixing of identifiers).  They are incompatible in the
sense that they are (potentially) disjoint.  So unless a system uses
random-access lists as its core pair type, bad things will happen if you
`apply' a function to a random-access list of arguments, just as will
happen if you `apply' a function to a vector of arguments.

I could add conversion functions if that seems useful (they are trivial
to define in terms of the folds given).  In a system that really
embraces the random-access pair type as fundamental, these would just be
identities.

But that brings up the issue I mentioned in another thread.  How far
should this library go to make random-access pairs usable in place of
traditional pairs.  Should it define a random-access version of `apply'?
  How about `quote', etc.?  Should it define a `lambda' form that
constructs rest lists as random-access lists?  I am beginning to think
yes, but I'd welcome feedback.  In any case, I will add this to the list
of issues in the next revision.

David