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

Re: Revised straw proposal for heuristic info

   From dyb@cs.indiana.edu Tue May 14 14:50:53 1996
   From: "R. Kent Dybvig" <dyb@cs.indiana.edu>
   To: will@ccs.neu.edu
   Subject: Re: Revised straw proposal for heuristic info
   Cc: rrrs-authors@martigny.ai.mit.edu
   > > Why limit the list in the third case to exact non-negative integers?
   > > By doing so, procedure-arity can't precisely describe procedures that
   > > accept, for example, 1 or 2+ arguments.
   > (procedure-arity _proc_)
   >   Returns information about the arity of _proc_.  If the result
   >   is #F, then no information is available.  If the result
   >   is an exact non-negative integer k, then _proc_ requires
   >   exactly k arguments.  If the result is an inexact non-negative
   >   integer n, then _proc_ requires n or more arguments.  If the
   >   result is a pair, then it is a list of non-negative integers,
   >   each of which indicates a number of arguments that will be
   >   accepted by _proc_; the list is not necessarily exhaustive.

There are lots of other interesting representations.  Here is one:

  The result is a list of boolean values, whose j'th element (zero origin)
  is #t iff the procedure will accept j arguments.

This representation is quite flexible.  For example, the requirement
of 0, 1, 4, 5, or 7 arguments is represented as:

	(#t #t #f #f #t #t #f #t)

The case of "n or more" can be handled by circular lists.  For example,
"3 or more arguments" can be represented by (excuse the Common Lisp notation):

	(#f #f #f . #43=(#t . #43#))

and the case of "at least two arguments followed by any number of triples of
arguments" is represented as

	(#f #f . #49=(#t #f #f . #49#))

Best of all, it doesn't use any numbers.  Don't complain to me that it
takes too long too cdr down the list---you probably have a list of
arguments in hand, anyway, that you're going to call LENGTH on,
so matching the argument list against the procedure-arity pattern
imposes only a constant factor overhead.

You can still use #f to mean "no information".