This page is part of the web mail archives of SRFI 14 from before July 7th, 2015. The new archives for SRFI 14 contain all messages, not just those from before July 7th, 2015.
SRFI-13 says that If a procedure is said to return "unspecified," this means that nothing at all is said about what the procedure returns, not even the number of return values. Such a procedure is not even required to be consistent from call to call in the nature or number of its return values. It is specifically permitted for such a procedure to return zero values, e.g., by calling (values). SRFI-14 has a similar problem, in the documentation for CHAR-SET-FOR-EACH. I assume that these specifications were written in the belief that (lambda () (values) #t) is legal R5RS Scheme, but it is not. The R5RS description of the VALUES procedure says that Except for continuations created by the call-with-values procedure, all continuations take exactly one value. Nothing in the R5RS requires continuations that were not created explicitly by CALL-WITH-VALUES to accept zero values. Hence (lambda () (char-set-for-each proc cs) #t) would not be portable; implementations are allowed to report an error when zero values are returned to a command continuation. I am sorry that the R5RS does not allow zero values to be returned to a command continuation. I am also sorry that the R5RS is not more explicit about the fact that doing so is, in effect, an error. I did not agree with the editorial decision not to describe this as an error. I recommend that SRFI-13 and SRFI-14 be revised to require these procedures to return a single unspecified value. Otherwise SRFI-13 and SRFI-14 should be revised to point out that portable code must call these possibly-zero-value-returning procedures only with a continuation created by CALL-WITH-VALUES. Will