Quick review Lassi Kortela 01 Feb 2021 21:07 UTC

Could the following be named according to standard RnRS conventions?

value/mv -> values-ref
coarity  -> values-length

Which arguments can produce multiple values?

apply/mv  -- only the last arg
call/mv   -- any arg
list/mv   -- only the last arg
vector/mv -- only the last arg
box/mv    -- only the last arg

call/mv uses a different convention from the others.

(set!-values formals producer)

Should probably say that it's restricted to (a b c) and (a b . c)
forms. The full lambda list syntax in some Scheme implementations
(e.g. Gambit, Gauche, Kawa) can be quite involved.

(list-values ...)
(vector-values ...)
(box-values ...)

The definitions should pay mind to the fact that the limit on the max
number of values that can be produced by an expression is likely to be
more strict than limit on the max length of a vector, or the maximum
length of a list that can be constructed. What happens when the
program exceeds the limit on the number of values?

Should these take optional [start [end]] arguments like `substring`?

(with-values ...)
(case-receive ...)

Both LGTM!

(identity ...)

Would it be safer to call this identity/mv?