>> If you want to leave the payload unspecified, you should also leave
>> the number of unspecified values unspecified. That certainly makes
> That is what R6RS permits in all such situations, but doing so was not only rejected by all R6RS implementers (except that in Racket "(if #f #f)" in a value context is a syntax error), but by the R7RS committee as well. It's a theoretical nicety that no one actually wants.
We shouldn't mix two different things here. One is the number of
return values for expression that - theoretically - shouldn't yield
any value but which is already prescribed by history, and the other
one is number values in a Just/Left/Right that should be left opaque.
PS Is there a real-life bugfree example of a program that would break
if forms like `set!' evaluated to no value?
Real life, yes, though of debatable style. I've written code with long chains of `let*` where I may throw in things like `set!` or more often `write` for debugging :
(let* ((a (foo))
(_ (write `(a: ,a)))
I'm not proud.