GNU bug report logs -
#17474
Making *unspecified* equivalent to (values) would seem convenient
Previous Next
Full log
Message #11 received at 17474 <at> debbugs.gnu.org (full text, mbox):
ludo <at> gnu.org (Ludovic Courtès) writes:
> R5RS defines ‘values’ as:
>
> (define (values . things)
> (call-with-current-continuation
> (lambda (cont) (apply cont things))))
>
> Thus, a conforming implementation must raise a run-time error when the
> continuation of a (values) form expects one or more values.
No. From R5RS:
-- procedure: call-with-current-continuation proc
[...]
The escape procedure accepts the same number of arguments as the
continuation to the original call to
call-with-current-continuation. Except for continuations created
by the `call-with-values' procedure, all continuations take
exactly one value. The effect of passing no value or more than
one value to continuations that were not created by
call-with-values is unspecified.
Please reread the last sentence. "unspecified". In fact, passing more
than one value to continuations that were not created by
call-with-values already does not raise a runtime error but instead just
drops the additional values:
(+ (values 4 5) 5) => 9
This patch _provides_ a default value when 0 values are given. That's
filling in a different unspecified behavior than throwing an error, but
Guile already fills in a different unspecified behavior than throwing an
error for multiple values.
So this behavior is neither out of line, nor against the standard. It
is merely a more convenient behavior for a situation that the standard
left unspecified.
--
David Kastrup
This bug report was last modified 10 years and 16 days ago.
Previous Next
GNU bug tracking system
Copyright (C) 1999 Darren O. Benham,
1997,2003 nCipher Corporation Ltd,
1994-97 Ian Jackson.