John, when you have a chance, would you please send a proposed revised document based on Olin's reply?
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)."
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?
John Cowan <email@example.com> 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".