This page is part of the web mail archives of SRFI 44 from before July 7th, 2015. The new archives for SRFI 44 contain all messages, not just those from before July 7th, 2015.
The explanation of * and % is confusing. The SRFI states:
When * is encountered in the definitions below, it is implied that
the asterisk is replaced with a function for the specific collection
and each of the collection's supertypes for which the procedure is
defined. For example, if we had a 'list' flexible sequence
collection, the functions list-contains?,
flexible-sequence-contains?, sequence-contains?, bag-contains? must
all exist, but collection-contains? does not.
But the *-methods seem to be defined for the supertype, not the subtype.
Given that, the above explanation is confusing. Wouldn't it be better to
state:
When * is encountered in the definitions below, it means that the
function exists for the named collection and all of its subtypes.
For example, all bags and subtypes of bag have a *-contains?
function: bag-contains?, sequence-contains?, and even
list-contains?.
Also, I'm not sure whether these functions are supposed to be
polymorphic. I think they are, but the SRFI isn't entirely clear. If so,
please clarify; for example:
Each *-function may be applied to the specific type named or to any
of its subtypes. For example, bag-contains? can find a value in a
sequence, flexible-sequence, or list.
Unrelated to this: The *-remove functions state that they "return two
values." I had to check the reference implementation to confirm that
this means "returns using VALUES." Perhaps the function prototype should
read:
procedure: *-remove-left![!] * => (VALUES % value)
--
Bradd W. Szonye
http://www.szonye.com/bradd