HELP WORDS                                    Updated A.Sloman July 1986

A word in Poplog is a structure representing a string of characters,
which is normally stored in the dictionary. See HELP * DICTIONARY.

The syntax for forming words in POP-11 is described in detail in
REF * ITEMISE, and illustrated below.

The role of words as data-structures, and procedures for operating
on words and the dictionary are described in REF * WORDS.


-- THE RULES FOR WORD FORMATION IN POP-11 ---------------------------

Words can be explicitly constructed using the procedure *CONSPROC
or implicitly constructed simply by being included in program text.

In program text they can be unquoted, e.g.

    cat -> dog;

or quoted, using the word quote symbol '"', e.g.

    "cat" -> valof("dog");

Inside list and vector expressions words are treated as quoted, e.g.

    [a list of five words {and a vector of words} ]

though they can be "un-quoted" by means of the "up-arrow" symbol "^"
or percent symbol "%". See TEACH * ARROW, TEACH * PERCENT.

In POP-11 there are restrictions on the sequences of characters that
can form implicitly constructed words whether quoted or unquoted.
The restrictions depend on the distinction of characters into different
types, some of which cannot combine with other characters to form a
word, e.g. ".", ";", and bracket symbols, while others can. But not
all combinations are allowed. Using word quote brackets it is possible
to form a quoted word containing arbitrary characters by enclosing them
in string quotes inside the word quotes, thus

    "'a long word with 9870&^%&^% arbitrary ":":$#@$aff characters'"

The restrictions in other contexts are briefly illustrated below. For
full details see REF *ITEMISE.


Try typing the following. Some of them will generate errors:

    list1 =>
    1list =>
    list" =>

POP-11 combines a letter followed by a series of letters and numbers
into a single word; but if you start with a number, then as soon as a
non-number is reached (e.g. the "l" in "1list") it assumes that it
should insert a break, i.e. the text is separated into a number followed
by a word. Similarly it normally breaks the word if a non-alphanumeric
character is reached.

By typing things is lists and printing them out shows how the "itemiser"
breaks things up:

    [list1] =>
    ** [list1]      ;;; one item

    [1list] =>
    ** [1 list]     ;;; two items

    [list"] =>
    ** [list "]     ;;; two items

You can also make a word out of certain non-alpha-numeric characters,
called "SIGN" characters:

    [+*+*+] =>
    ** [+*+*+]      ;;; one item

    [**+  ++*] =>
    ** [**+ ++*]    ;;; two items

    [**+abc] =>
    ** [**+ abc]    ;;; two items

    [abc+++] =>
    ** [abc +++]    ;;; two items

Sign characters are:

 ! # $ & = - ~ ^ | \ @ + * : < > ? /

 (Later `\` may default to an 'alphabeticiser' character).

Some characters which will not join up with others to make a word:

    " % ( ) ' ` { [ } ] ; , .

because they play a special role in the syntax of POP-11. (See
HELP * SYSWORDS)

    ["""] =>
    ** [" " "]      ;;; three items

    [(())] =>
    ** [( ( ) )]    ;;; four items

    [{}] =>
    ** [{}]         ;;; Read as a list containing an empty vector

A sequence of characters made of "sign" characters and letters will be
broken at the point where the two sorts of characters meet, unless they
are joined by an underscore symbol "_", e.g.

    fast_++
    ++_lists_++

The underscore can also be used to join characters of the same type, e.g.

    my_favourite_procedure
    ++_!!_**

You need to know these rules if you wish to declare variables, or create
words using the word quote " .  The following will cause errors:

    "23list" =>
    "aa++++" =>

But not
    "'23list'" =>
    "'aa++++'" =>

If a number precedes a letter in a VARS declaration it is taken to
indicate an operator precedence for an infix operation (See HELP * INFIX)
    vars 2list;

is equivalent to
    vars 2 list;

and declares list as an operator of precedence 2!

Error messages can result from attempting to combine characters of
inappropriate types.

HELP * ALPHABETICISER explains how to convert the character `\` to an
alphabeticiser so that any character it precedes is treated as an
alphabetic character. HELP * ITEM_CHARTYPE indicates more generally how
the itemiser rules can be changed, e.g. if you are using POP-11 to
define a new language.


-- RELATED DOCUMENTATION FILES ----------------------------------------

*ALPHABETICISER - see above
*APPDIC     - applies a procedure to each word in the POP-11 dictionary
*CONSTANT   - use of constant identifiers
*CONSWORD   - creates a word from a string
*COUNTITEM  - counts the number of text items in a file
*DICTIONARY - describes the dictionary in which words are stored
*EXPLODE    - puts all the parts of a data structure on the stack
*GENSYM     - systematically creates new words
*IDENTPROPS - returns the syntactic type of a word
*ITEM_CHARTYPE - accessing and updating itemiser type of characters
*ISWORD     - recogniser procedure for words
*MACRO      - on declaring words as macro-names and non-macro-names
*NONMAC     - allows a macro to be mentioned without being applied
*NONOP      - allows an operation to be mentioned without being applied
*PACKITEM   - creates an integer or word out of a list of characters
*SUBSCRW    - accesses an individual character in a word
*SUBWORD    - creates a smaller 'subword' from a word
*SYSCANCEL  - removes any identifier currently associated with a word
*SYSCANCELWORD - removes a word from the dictionary
*CANCEL     - macro simplifying use of SYSCANCEL
*UNDEF      - on objects of type UNDEF
*UNDEFWORD  - returns word in UNDEF record
*UNPACKITEM - splits a word or integer into a list of words or integers
*VALOF      - accesses or updates the value of a word as an identifier
*VARS       - use and declaration of dynamically scoped variables
*LVARS      - use and declaration of lexically scoped variables
*WORDQUOTE  - on the use of the wordquote "
*WORDSWITH  - lists dictionary words containing a specified substring

See also REF *ITEMISE for details of itemising in POP-11 and REF * WORDS
for system details concerning the representation of words.

--- C.all/help/words
--- Copyright University of Sussex 1988. All rights reserved. ----------
