Re: Fwd: Erratum for SRFI 1
Olin Shivers 26 Jul 2016 23:19 UTC
It is clear from the full description of the functions that the predicate
arguments are permitted to return values other than #t and #f. For example, the
description of ANY says that it returns "returns the true value that the
predicate produced." It then goes on to say that the function's "name does not
end with a question mark -- this is to indicate that it does not return a
simple boolean (#t or #f), but a general value." None of this careful text
would make sense if the predicate argument was required to return only #t or #f.
It's clear that the text you don't like is, in fact, a slip-up. I suggest that
"and returning a boolean result" be changed to "and returning a single value,
interpreted as a boolean (that is, #f means false, and any other value means
true)."
-Olin
On 07/26/2016 06:38 PM, Arthur A. Gleckler wrote:
> Hi, Olin. Would you mind if we fixed the erratum described
> below in SRFI 1?
>
> Thanks.
>
> John Cowan <xxxxxx@mercury.ccil.org> writes:
>
> | There is a long-standing bug in the SRFI 1 specification
> | that couldn't be fixed because we didn't have an erratum
> | process. The definitions of `any`, `every`, and
> | `list-index` specify that the predicates must return a
> | boolean result, i.e. `#t` or `#f`. This has never been
> | the case: all known implementations accept ordinary
> | predicates that can return any object other than `#f` to
> | mean "true". The words "and returning a boolean result"
> | should be removed from each definition.
>>
> | Here's a paragraph for the Status section:
>>
> | Erratum: The procedures `any`, `every`, and `list-index`
> | accept predicates that can return any value other than
> | `#f` to represent "true".
>