[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: proposing a simpler mechanism



Thomas Bushnell BSG wrote:
Case-lambda is not a part of standard scheme.

Case-lambda is a part of standard Scheme.

http://www.r6rs.org/final/html/r6rs-lib/r6rs-lib-Z-H-6.html#node_idx_262

If you mean srfi-16,
notice the way the reference implementation works.  It defines a
procedure with a formals list that looks like this:

(lambda args ....)

That would be an arity of "0, #t" in my system.

Yes, and the same information could reported by an implementation of the current SRFI. However, the proposal leaves open the possibility of better arity reporting for case-lambda forms in systems where case-lambda is treated as a primitive form.

Indeed, the
Now, the procedure it generates happens to do
  (error "Wrong number of arguments to CASE-LAMBDA.")
under various circumstances.

I assume you want to pretend that this error is the "same" as the error
one gets for calling (lambda (x) ...) with other than exactly one
argument.  But why?

I do not want to pretend this, so I don't see how to answer your question.

*Exactly* which errors are the errors referred to by this arity checking
thing?

If you mean "the parameters in the lambda specification", then
case-lambda defines procedures with entirely indefinite arity (just look
at the lambda expressions!).

Alternatively, if you want to insist that case-lambda arities must be
the "expected" ones for the metaphysical notion of arity, then please
add to srfi 102 mention that the reference implementation of srfi 16 is
now incorrect, and indeed, cannot be portably implemented together with
srfi 102.

Nowhere do I insist that case-lambda arities must be the "expected" ones, only that they may be.

There is nothing wrong with the reference implementation of SRFI 16 and it is not fundamentally at odds with anything in the proposal or portable reference implementations of it. It would be perfectly acceptable for an implementation of this SRFI to report that every procedure constructed with case-lambda accepts 0 or more arguments. An implementation may do this for any procedure, in fact. On the other hand, an implementation that supports better arity information for case-lambda procedures may say a function accepts "1 or 3 arguments" for example. But this is only correct if applying the function to any number of arguments that is neither 1 nor 3 results in an error.

David