Email list hosting service & mailing list manager

arity failures Thomas Bushnell BSG (13 Nov 2009 18:54 UTC)
Re: arity failures David Van Horn (13 Nov 2009 19:05 UTC)
Re: arity failures Thomas Bushnell BSG (13 Nov 2009 19:25 UTC)
Re: arity failures Per Bothner (13 Nov 2009 19:16 UTC)
Re: arity failures Thomas Bushnell BSG (13 Nov 2009 19:27 UTC)
Re: arity failures Shiro Kawai (13 Nov 2009 20:13 UTC)

arity failures Thomas Bushnell BSG 13 Nov 2009 18:54 UTC

So "passing" an arity check doesn't mean that the number of arguments
you pass is correct, as Dybvig's already noted.

Also, "failing" an arity check doesn't mean that you will get any kind
of error or exception as a result.

For example, in response to the question, "what is the arity of read", I
said that under my proposal,
  (procedure-arity read) => 0, #t
and then I gave code which throws an error if more than one argument is
passed.  But no error is required by Scheme, both because an
implementation is free to assign a meaning to (read a b c), and further,
because an implementation is free to assign a meaning in general to
"extra arguments" passed to procedures.

I can understand then "arity" to mean something which matches the syntax
specification for lambda formals lists, in which there is a minimum and
permission for more arguments.

People seem to want some *other* meaning than that.  Something like "the
number of arguments that can be passed without signaling an error",
though that's not a very clear concept without specifying which errors
are involved.  Moreover, for the reasons Dybvig has indicated
previously, this is not something most systems could successfully
implement, what with passing argument lists around via apply and such.

So, to recap:

Being told that a procedure takes, say, exactly three arguments, does
not mean that
  1) You won't get an error for passing three arguments;
  2) You will get an error for passing other than three arguments.

However, I believe it could mean that:
  * The procedure was created with a proper lambda formals list
containing exactly three identifiers.

Thomas