Search                        Top                                  Index
HELP UNDEF                                   John Williams, January 1987

There is a built-in constant UNDEF whose value is the word "undef".

    "undef" = undef

is true. This word is used to initialise some data-structures, e.g.
vectors made with the procedure *INITV:

    initv(3) =>
    ** {undef undef undef}

There is also a class of objects of type 'undef'. When a variable is
first declared, its value is initialised to an undef record created from
the variable name. To illustrate:

    vars y;               ;;; First declaration of Y

    y =>
    ** <undef y>

Undef objects are recognized with the procedure *ISUNDEF. Their single
component (accessed with *UNDEFWORD) is the name of the variable for
which the undef record was originally created. So

    isundef(y) =>
    ** true

    undefword(y) =>
    ** y

Note that the value UNDEF is NOT an undef record, it is a word. So



Undef records can be created independently of variable declarations, by
using the procedure *CONSUNDEF. This takes a word as argument, and
returns an undef object whose *UNDEFWORD is that word. For example:

    consundef("x") =>
    ** <undef x>

Using CONSUNDEF, one could define the following routine to remove the
value of a named variable:

    define cancel_value(word);
        consundef(word) -> valof(word)

An example:

    vars var;
    var =>
    ** <undef var>

    123 -> var;
    var =>
    ** 123

    var =>
    ** <undef var>

Note that CANCEL_VALUE does just that: it replaces the value of a
variable with an undef object. It does NOT cancel any special syntactic
properties the variable may have, such as being a syntax word, or an
infix operator. To properly cancel a variable, use the procedure
*SYSCANCEL, or the related macro *CANCEL.

See also:

-----<Copyright University of Sussex 1987.  All rights reserved.>-------