Common Lisp the Language, 2nd Edition
Next: Declarations
Up: Optimization
Previous: Constraint
Cycles
New functions operating on series can be defined just as easily as new
functions operating on any other data type. However, expressions
containing these new functions cannot be transformed into loops unless a
complete analysis of the functions is available. Among other things,
this implies that the definition of a new series function must appear
before its first use.
[Declaration specifier]
optimizable-series-function
The declaration specifier
(optimizable-series-function
integer
)
indicates that the function being defined is a series function that
needs to be analyzed so that it can be optimized when it appears in
series expressions. (A warning is issued if the function being defined
neither takes a series as input nor produces a series as output.)
Integer (default 1) specifies the number of values returned by
the function being defined. (This cannot necessarily be determined by
local analysis.) The only place optimizable-series-function
is allowed to appear is in a declaration immediately inside a
defun
. As an example, the following shows how a simplified
version of collect-sum
could be defined.
(defun simple-collect-sum (numbers)
(declare (optimizable-series-function 1))
(collect-fn 'number #'(lambda () 0) #'+ numbers))
[Declaration specifier]
off-line-port
The declaration specifier
(off-line-port
port-spec1
port-spec2
...)
specifies that the indicated inputs and outputs are off-line. This
declaration specifier is only allowed in a defun
that
contains the declaration optimizable-series-function
. Each
port-spec must either be a symbol that is one of the inputs of
the function or an integer j indicating the jth output
(counting from zero). For example, (off-line-port x 1)
indicates that the input x
and the second output are
off-line. Every port that is not mentioned in an
off-line-port
declaration is assumed to be on-line. A
warning is issued whenever a port’s actual on-line/off-line status does
not agree with its declared status. This makes it easier to keep track
of which ports are off-line and which are not. Note that off-line ports
virtually never arise when defining scanners or reducers.
Next: Declarations
Up: Optimization
Previous: Constraint
Cycles
AI.Repository@cs.cmu.edu