MTS 8: LISP and SLIP in MTS
June 1976
for arrays.
An atom may also be declared to be an array name with the
following declaration:
(DECLARE H =ARRAY)
Interpreter functions which are N-type or F-type functions are
already declared correctly within the compiler.
Number Types
The LISP compiler assumes that no floating point numbers will
ever be generated, and therefore compiles all numeric calcula-
tions to perform integer arithmetic.
The user can change this assumption with the declaration:
(DECLARE =SYSFLAG =INTEGERS NIL)
in which case all functions that allow floating-point argu-
ments will be compiled as calls to the interpreter.
Block Compiling
Within a compiled program, any internal LAMBDA-expression is
defined to be a separate "block," and each compiled program
consists of one primary block and zero or more secondary
blocks.
In addition, external functions which are defined as LAMBDA-
expressions may be declared to be "macros," and the compiler
will replace the function name with the LAMBDA definition, and
compile the LAMBDA-expression as an internal block.
The important property of an internal block is that it has
access to the local variables defined in the block which
called it (and all higher blocks).
For example, suppose function A calls function B, and
(DECLARE B =MACRO)
was in effect when A was compiled. Then the SUBR code for A
contains a compiled "copy" of B. If X is a local variable
within A, all free references to X within the copy of B will
refer to that local variable.
The number of blocks compiled and the length (in bytes) of
code produced for each block may be obtained via a printed map
on LISPOUT by setting the variable =MAP to T before compiling.
84 LISP