[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
straw proposal: heuristic info from procedures
Will Clinger proposed:
> (procedure-arity _proc_)
>
> Returns information about the arity of _proc_. This information
> can take several forms:
>
> an exact non-negative integer k: _proc_ requires exactly k
> arguments.
> (k): _proc_ requires at least k arguments.
> (k1 k2): _proc_ requires at least k1 but no more than k2 arguments.
> #F: no information on the arity of _proc_ is available.
I would like to see any procedure-arity proposal take into account the
possibility of extending Scheme with case-lambda (a la Dybvig/Hieb).
In this case, a procedure has multiple "traditional" arities -- your
second case does not cover this one, since there could be holes.
In MzScheme, the arity procedure (whose documentation is available at
http://www.cs.rice.edu/CS/PLT/packages/doc/mzscheme/node43.html#SECTION003200000000000000000
or http://www.cs.rice.edu/CS/PLT/packages/doc/mzscheme/mzscheme.html
followed by the "Arity" entry) returns
1. a number,
2. the structure arity-at-least, whose field value gives the actual
minimum number, or
3. a list of elements of type 1. and 2. (representing case-lambda).
> (procedure-source-file _proc_)
>
> Returns the name of the file that contains the source code for
> _proc_, as a string, or returns #F if this information is not
> available.
>
> (procedure-source-position _proc_)
>
> Returns an exact integer that specifies the number of characters
> that precede the opening parenthesis of the source code for _proc_
> within the source file returned by PROCEDURE-SOURCE-FILE, or
> returns #F if this information is not available.
>
> (procedure-code _proc_)
>
> Returns the source code for _proc_ as a lambda expression, in the
> traditional representation as a list, or returns #F if no source
> code is available for _proc_.
These three could be merged if instead there were a single procedure
that returned the location-annotated source of the procedure. At
least, these three could be defined as primitives on top of that.
Also, I really don't like this dependence on "files", but so be it.
'shriram