3.3 Identifiers

The following functions deal with identifiers and the OBLIST, the structure of which is not defined. The function of the OBLIST is to provide a symbol table for identifiers created during input. Identifiers created by READ which have the same characters will therefore refer to the same object (see the EQ function in “Elementary Predicates”, section 3.1 on page 20).

COMPRESS(U:id-list):{atom-vector} eval, spread
U is a list of single character identifiers which is built into a Standard LISP entity and returned. Recognized are numbers, strings, and identifiers with the escape character prefixing special characters. The formats of these items appear in “Primitive Data Types” section 2.1 on page 7. Identifiers are not interned on the OBLIST. Function pointers may be compressed but this is an undefined use. If an entity cannot be parsed out of U or characters are left over after parsing an error occurs:

***** Poorly formed atom in COMPRESS

EXPLODE(U:{atom}-{vector}):id-list eval, spread
Returned is a list of interned characters representing the characters to print of the value of U. The primitive data types have these formats:
Leading zeroes are suppressed and a minus sign prefixes the digits if the integer is negative.
The value appears in the format [-]0.nn...nnE[-]mm if the magnitude of the number is too large or small to display in [-]nnnn.nnnn format. The crossover point is determined by the implementation.
The characters of the print name of the identifier are produced with special characters prefixed with the escape character.
The characters of the string are produced surrounded by double quotes ”…”.
The value of the function-pointer is created as a list of characters conforming to the conventions of the system site.

The type mismatch error occurs if U is not a number, identifier, string, or function-pointer.

GENSYM():identifier eval, spread
Creates an identifier which is not interned on the OBLIST and consequently not EQ to anything else.

INTERN(U:{id,string}):id eval, spread
INTERN searches the OBLIST for an identifier with the same print name as U and returns the identifier on the OBLIST if a match is found. Any properties and global values associated with U may be lost. If U does not match any entry, a new one is created and returned. If U has more than the maximum number of characters permitted by the implementation (the minimum number is 24) an error occurs:

***** Too many characters to INTERN

REMOB(U:id):id eval, spread
If U is present on the OBLIST it is removed. This does not affect U having properties, flags, functions and the like. U is returned.