HELP CLASSES Updated A. Sloman Aug 1986
POP-11 has a number of built in data classes including integers,
decimals, words, strings, booleans, procedures, closures, vectors,
arrays, processes, references, pairs (used for lists), nil (the empty
list), and termin. See REF * DATA for a complete list.
Each data type has a "KEY" associated with it. The key is a record that
contains information about the class, including procedures associated
with the class.
"Vector" type data-structures have components that are accessed or
updated by numerical subscripts, whereas "record" type data-structures
have field selector/updater procedures. There are several types of
vector classes (e.g. ordinary vectors and strings) and several types of
record classes, e.g. pairs and references.
The procedure * CONSKEY enables a new class of vectors or a new class of
records to be created by the user, but normally it is more convenient to
use syntax constructs that invoke CONSKEY.
REF * DEFSTRUCT explains how to create new classes of records and
vectors easily.
For full details of what classes are see REF *KEYS.
-----------------------------------------------------
The following procedures access or update components of the key
associated with a class.
class_=(key) -> procedure
procedure -> class_=(key)
Returns the equality testing procedure for objects of the class.
This is user-assignable, the default being sys_=
class_access(n, key) -> procedure
Given a record class key, returns the n'th accessing procedure.
class_apply(key) -> procedure
procedure -> class_apply(key)
Returns/updates a procedure that specifies how to "apply" objects of
the given class, i.e. what to do if the object is applied. For
vector type keys, this defaults to the subscriptor procedure,
hence VEC(5) is equivalent to SUBSCRV(5, VEC). Because it is
user-assignable, users can create new types of procedure objects.
class_cons(key) -> procedure
Returns a procedure for constructing items of the given class.
class_datasize(key)-> n
Given a record type key, returns the length in longwords of records
of that class.
class_dataword(key) -> word
Given a key returns the associated dataword
class_dest(key) -> procedure
Returns the 'destructor', or 'exploder' for that class.
class_hash(key) -> procedure
procedure -> class_hash(key)
Returns/updates the hash function for the class, invoked by SYSHASH.
See HELP * SYSHASH
class_init(key) -> procedure
Given a vector type class key, returns the initialiser procedure.
class_print(key) -> procedure
procedure -> class_print(key)
Returns/updates the procedure used by *SYSPR to print items from the
class. The default is *SYS_SYSPR, but can be changed.
class_recognise(key) -> procedure
Returns a procedure that recognises members of the class
class_spec(key) -> specification
For a vector key returns the field size.
For a record type key returns the list of field specifiers.
For any other time returns false.
class_subscr(key) -> procedure
For a vector-type key returns the subscripting procedure.
class_fast_subscr(key) -> procedure
Like class_subscr, but returns a non-checking subscriptor procedure,
to be used with caution. (See REF * FASTPROCS)
---------------------------------------------------------
The following procedures also operate on or are associated with keys:
conskey(word,specification) -> key
Creates a key, and hence a new class.
For a vector class the specification should be either the word
"full" or a positive or negative integer.
For a record class the specification is a list of field sizes.
datakey(item) -> key
Given any item returns the key for the class containing the item
iskey(item) -> boolean
Recogniser for keys
key_of_dataword(word) -> key
Given a word which is a dataword return the corresponding KEY. This
is a property, initialised for built in keys, and updated by
*RECORDCLASS and *VECTORCLASS.
See also HELP * KEYS and the following documentation for procedures that
operate on data-structures:
*APPDATA - apply a procedure to every element of a structure
*COPY - copy a data-structure
*COPYDATA - a recursive data-structure copier
*DATALENGTH
*DATAFILE - store data-structures in a disk file.
*DATALIST - form a list of components of a structure
*DATAWORD
*EXPLODE - put all the elements of a structure on the stack
*FILL - copy the top elements of the stack into a structure
*ISRECORDCLASS
*ISVECTORCLASS
*ISEXTERNALCLASS
*MAPDATA - transform elements of a structure via a proceure
*RECORDS
*RECORDCLASS - create new record classes
*VECTORS
*VECTORCLASS - create new vector classes
--- C.all/help/classes -------------------------------------------------
--- Copyright University of Sussex 1988. All rights reserved. ----------Author: Updated A. Sloman Aug 1986