A number of global variables provide global control of the PSL system, or reference values which are constant throughout execution. Certain options are controlled by switches, variables which have a value of either t or nil. For example, the value of *verboseload controls the display of messages when files are loaded. The values of other global variables are not restricted to be boolean. For example, the value of outputbase* is the radix in which numbers are printed. PSL uses the convention that the name of a global variables which is a switch begins with ”*”. The names of other global variables end with ”*”.
Strictly speaking, NAME is a switch and *NAME is a corresponding global variable that
assumes a value of t or nil. Both NAME and *NAME are loosely referred to as switches
elsewhere in the manual.
The functions on and off functions are used to change the values of the identifiers associated with switches. Some switches contain an s-expression on their property lists under the indicator simpfg 1 1The name simpfg comes from its introduction in the Reduce algebra system, where it was used to specify various simplifications to be performed as various switches were turned on or off.. The s-expression has the form of a cond list:
If the simpfg indicator is present, then the on and off functions also evaluate the appropriate action in the s-expression.
Evaluation of (on fast-integers) will result in *fast-integers being set to t and evalution of the function enable-fast-numeric-operators.
Some actions search the property list of relevant ids for the following indicators.
Associates a function to be run with an id typed in a break loop (see Chapter 16). For example, q is used to exit from a break loop and (get ’q ’breakfunction) returns breakquit.
PSL uses the property type to indicate whether a function is a fexpr, macro, or nexpr. If this property is absent, expr is assumed. For example, (get ’and ’type) returns fexpr.
PSL uses the property vartype to indicate whether an identifier is of type global or fluid.
The interpreter looks under *lambdalink for a lambda expression when a compiled definition cannot be found.
The compiler and loader use a number of other indicators, see Chapter 19.
These flags are used primarily to control the evaluation of expressions during compilation (for more information see Chapter 19).
The function putd is used to associate function definitions with ids. Its application is aborted if the id has been flagged lose.
If *usermode is t, when a function is defined its name will be flagged user. This is used to distinguish user defined functions from system functions (see Chapter 9 for more information).