Am Mo., 14. Sept. 2020 um 18:55 Uhr schrieb Wolfgang Corcoran-Mathe
<xxxxxx@sigwinch.xyz>:
> Thanks for this clear, useful, and exceptionally detailed SRFI. I
Thanks for the compliment and even more for your comments.
> (1) Is there a better name for with-values? By unofficial convention,
> Scheme procedures whose names begin with `with-' establish some
> dynamic state for a procedure call. with-values does not. The range
> of available names here is unfortunately rather limited. I thought
> `consume' was somewhat descriptive of what with-values does, but there
> may be better names.
The name `with-values` is from a paper by Ashley and Dybvig
(http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.69.5878&rep=rep1&type=pdf)
where they argue that this syntactic mirror or the procedural
call-with-values should have been standardized instead.
Note that `with-values` is not a procedure so the "unofficial
convention" you refer to may not apply. There are existing examples of
syntax like "with-syntax" (R6RS) or "with-ellipsis" (Guile and now
SRFI 211) that do not call a procedure or establish some dynamic
state.
`with-values` is just a variation of `apply/mv` (switched arguments)
added because of its parallelity to `call-with-values` and to
implement the proposed syntax of the Ashley/Dybvig paper. Calling it
"consume" (otherwise a fine name!) contradicts this idea.
> (2) For the specification of case-receive, I think we should have
> "(case-receive <producer> <clause> ...)" instead of "(case-receive
> <producer> (clause ...))", unless I've misunderstood something.
> The example implementation of case-receive is also missing some
> close-parens.
Thanks for catching this. Indeed, angle brackets are missing around
"clause" and there is an extraneous set of parentheses.
> (3) list-values: For "Is is an error ...", read "It is an error ...".
Thanks, will correct it.
> (4) Several specifications require that an argument be a box, and
> box-values refers to unbox. I suggest including a pointer to SRFI
> 111/(scheme box) to clarify these references.
SRFI 195 (a conservative extension of SRFI 111) is mentioned the first
time a box appears (in box/mv). Nevertheless, you make a point and I
will add a general remark at the top that by "box" I mean a SRFI
111/195 box.
> (5) The description of compose is odd: "When the resulting procedure
> is applied to arguments, these arguments are applied to transducer1,
> whose results are applied to transducer2, and so on..." The phrase
> "applied to" here seems to have its arguments flipped; usually
> procedures are "applied to" arguments. Similar unusual wording occurs
> in the specs of bind/list, bind/box, and bind.
Yes, the objects are reversed here. The correct term is "are passed
to". Thanks for noting this!
> (6) bind/list, bind/box, bind: For "... and the transducers are no
> procedures", read "... and the transducers are not procedures".
Yup.
> I've run some preliminary experiments with the sample implementations
> and haven't yet found any errors, aside from the typos in case-receive
> noted above. I've collated a single source file from the SRFI's code;
> would you have any interest in adding it to the SRFI repository?
There is a single source file in the repo
https://github.com/scheme-requests-for-implementation/srfi-210. Did
you miss it or am I missing something?
So long,
Marc