2020年6月29日(月) 5:21 Marc Nieper-Wißkirchen <xxxxxx@nieper-wisskirchen.de>:
>> If you want to leave the payload unspecified, you should also leave
>> the number of unspecified values unspecified. That certainly makes
>> sense.
>
>
> 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))) 
      (b (bar)) 
     ... 
      )
 ...) 

I'm not proud. 

-- 
Alex