1 V-mode Lisp Version III PE-T-800 DATE: Nov. 20, 1980 SUBJECT: V-mode Lisp Version III REFERENCE: PE-T-599 ABSTRACT + ________ An enhanced version of V-mode Lisp (PE-T-599) is described. An abbreviated table of contents follows. 1 Primitive Functions now have Value Cells 2 Arithmetic Extensions 3 Atom Manipulation 4 Boolean Operations 5 Memory Image Save and Restore 6 Set Operations 7 Map Functions (Funarg) 8 Marking 9 Property Lists 10 Printing 11 TTY Graphics 12 Input 13 Garbage Collection 14 The Knowledge Representation Language FRL 15 Miscellaneous 16 Libraries 17 Bibliography 18 Quick Reference 1 V-mode Lisp Version III PE-T-800 Table of Contents + _________________ 1 Primitive Functions now have Value Cells............................2 2 Arithmetic Extensions...............................................3 3 Atom Manipulation...................................................4 4 Boolean Operations..................................................4 5 Memory Image Save and Restore.......................................5 6 Set Operations......................................................6 7 Map Functions (Funarg)..............................................6 8 Marking.............................................................7 9 Property Lists......................................................8 10 Printing...........................................................9 11 TTY Graphics......................................................11 12 Input.............................................................13 13 Garbage Collection................................................13 14 The Knowledge Representation Language FRL.........................14 15 Miscellaneous.....................................................15 lmember............................................................15 quit...............................................................15 pause..............................................................15 alist..............................................................16 nconc..............................................................16 Comments...........................................................16 blank..............................................................16 nullchar...........................................................17 Comparisons........................................................17 Command Line.......................................................17 Atom Quoting ("xxx")...............................................17 fill...............................................................18 nullreduce.........................................................18 root...............................................................18 suffix.............................................................19 prompt.............................................................19 Page 1 1 V-mode Lisp Version III PE-T-800 atomquote..........................................................19 16 Libraries.........................................................19 17 Bibliography......................................................20 18 Quick Reference...................................................21 Page 2 1 V-mode Lisp Version III PE-T-800 V-mode Lisp Version III + _______________________ Introduction + ____________ This document describes an enhanced version of V-mode Lisp (PET-599), as well as providing a quick reference to all available Lisp functions. This version of Lisp contains primitives for the knowledge representation language FRL, as described by Goldstein and Roberts [1,2]. This release is the first of a series of planned enhancements to Lisp. Forthcoming in the ensuing months will be an integrated FP command language, with OS-level primitives as described in [5]. The command manipulation primitives will be accessible via Lisp, FP, or FRL. To use Lisp on our engineering systems, type 'x.lisp'. 19 Primitive Functions now have Value Cells + ___________________________________________ A value cell is now associated with each atom; for each atom + __________ that names a primitive function, the subr or fsubr associated with that function is stored in the value cell. The evaluator checks this cell first when evaluating an atom. If the cell is not nil, then that value is returned, else the alist is searched. Thus, substantial increases in speed are obtained. Users may define functions to be placed in the value cell by using sdefun and sndefun. + ______ _______ Once again, substantial speed increases are possible. Caution! primitive function names may not be used anywhere else in a program. The value cell binding is permanent and global. The same holds when a function is defined into the value cell. If you really want to change a primitive function definition, or + ______ set the value cell to some arbitrary value, or allow that name to be used as before, you may use either sdefun, sndefun, or putvaluecell, + ______ _______ ____________ which works like putplist. + ________ In the future, a full shallow-binding system will probably be constructed, thereby eliminating the naming restrictions. It is hoped that users will not be inconvenienced until this time comes (please inform me of opinions on this matter). 20 Arithmetic Extensions + ________________________ Lisp now supports double precision floating point numbers, as well as single-precision integers. Syntactically, one enters these numbers by typing them in standard floating point notation; any Page 2 1 V-mode Lisp Version III PE-T-800 number typed with a decimal point will take on a floating representation within Lisp. All of the previously defined functions, such as plus, times, etc., will operate using floating arguments: if + ____ _____ any argument given to these functions is a floating number, then all arguments are floated and a floating result is returned. In this sense our implementation is similar to the "contagious" arithmetic functions described in the Interlisp manual, sec. 13.3 [6]. As yet, no facilities are provided for controlling the printing of floating point numbers; they are printed in standard scientific notation, with all decimal places. Extensions will be made to the printing facilities as feedback deems appropriate. To aid in the use of the floating point arithmetic, the following functions have been added: (floatp ) if is a floating point number, then t is returned, else + _ nil. + ___ (float ) If is an integer, then its floating point representation is returned, else is returned unchanged. (int ) If is a floating number, then its integer representation is returned, else the atom is returned unchanged. (intlist ) Like int, but operates on a list of values instead, returning a + ___ list. The floating point functions use a "boxed" implementation of floating numbers, as described in Interlisp, sec. 13. At present, a segment is allocated for these numbers; they are not garbage-collected. Additional functions will be added depending on feedback. For some ideas, see the Interlisp manual, section 13. Page 3 1 V-mode Lisp Version III PE-T-800 21 Atom Manipulation + ____________________ (explode ) Converts an atom into a list of its component characters. For example, (explode 'john) = (j o h n). explode returns its + _______ argument unchanged if it is a list. (implode ) The inverse of explode. Given a list of atoms, implode converts + _______ _______ them all to a single atom by concatenation. Thus, (implode '(a b c)) = abc, and (implode '(abc qwert p q r)) = abcqwertpqr. If any component of is nil or a list, implode ignores that component. + ___ So, (implode '(a () b (c d e))) = ab. (charlength ) Returns the number of characters in ; returns 0 if argument is not an atom. 22 Boolean Operations + _____________________ (and ... ) Evaluates each in succession. If one of them returns nil, + ___ then and returns nil. If all of them evaluate to non-nil, then the + ___ ___ last value () is returned. (or ... ) Evaluates each in succession until one of them evaluates to non-nil. That value is then returned. If no evaluates to non-nil, then nil is returned. + ___ These implementations of and and or are identical to those found + ___ __ in Interlisp, sec. 5.2. 23 Memory Image Save and Restore + ________________________________ The following functions allow the user to save the Lisp data Page 4 1 V-mode Lisp Version III PE-T-800 space directly as a memory image, and to subsequently restore that image. The functions operate very rapidly, and can greatly speed up an interactive debugging session where one wishes to escape to Primos often for editing or some other purpose. The only drawback in using the image functions is that the integrity of the image file is not preserved over changes to the Lisp interpreter itself. Normally, however, reloading some definitions (using co) in their ascii form is not so time-consuming that major + __ frustrations result. An advantage of saving the data space in this way is that circular list structures, if present, are perfectly preserved. (saveimage ) or (sa ) Saves the entire current memory image in . It is recommended that this function be invoked only from Lisp command level. Invocation from a co file is permitted. + __ (restimage ) or (re ) Restores the memory image in to the Lisp data space. The same restrictions apply as in saveimage. + _________ 24 Set Operations + _________________ These functions are implemented similarly to those described in Interlisp sec. 6. They use lmember (see Miscellaneous), so that + _______ lists whose elements are lists may be intersected or unioned. Other functions will be added as feedback dictates. (intersection ) Returns the intersection of the two arguments. (union ) Returns the union of the two arguments. Page 5 1 V-mode Lisp Version III PE-T-800 25 Map Functions (Funarg) + _________________________ These are general functions that accept several functions as arguments, along with input data. They are very useful for applying a function to an arbitrary list of data. (map ) Applies to each element of a list () as selected by , moving through the list by means of . A list of the values so generated is returned. For example, to print every other element of a list, we might write: (map car cddr print '(a 1 b 2 c 3)), which would type at the terminal: a b c and return (a b c). This function is essentially a generalization of the various mapx functions found in many Lisp systems (see Interlisp, sec. 11). + ____ (gmap ) Performs the same as map, but the user may supply + ___ , which serves in place of the list function + ____ implicit in map. Thus, + ___ (map f1 f2 f3 data) is equivalent to (gmap f1 f2 list f3 data) . One might use this function with, for example, append, so that + ______ (gmap car cddr append (lambda(x)x) '((a b c) 1 (d e) 2 (f g h) 3) ) will select every other element of the input list and append them Page 6 1 V-mode Lisp Version III PE-T-800 together, producing (a b c d e f g h). 26 Marking + __________ Lisp now provides a facility for users to mark a Lisp cell, test for the presence of a mark, and reset a mark. These functions are useful for relatively fast processing of shared or circular list structures. At present, only one bit of mark is supported. There is provision for another bit, which will be used as feedback dictates. Note that for many applications this form of marking is insufficient; these users are urged to design data structures around other mechanisms, such as property lists (see next section), or frames (see FRL). However, the built-in mark capability described here works efficiently within the standard list structure. Note that these user-controlled marks have nothing to do with marks used with garbage collection. The user marks are invisible to all operations other than those described below. To avoid ambiguities, marks are not propagated by the cons + ____ operation; i.e., if x and y are marked lists, then (cons x y) produces an unmarked list, but x and y will still be marked. (mark ) Marks the cell denoted by . Atoms cannot be marked and an error is generated if this is attempted. (unmark ) The inverse operation of mark. + ____ (marked ) Returns t if is marked, else nil. + _ ___ (unmarkall ) Resets all marks in the entire structure of . This is + ______ simply a convenient, efficient primitive for invoking unmark + ______ Page 7 1 V-mode Lisp Version III PE-T-800 recursively. Note that unmarkall will not work with circular list structures, + _________ but will work with shared structures. 27 Property Lists + _________________ Mostly, these follow the standard Lisp definitions (see Interlisp, sec. 7). For an introduction to property lists, see the Lisp 1.5 Primer [6]. Each character-string atom has, with its print-name entry in the atom table, an auxiliary list known as the property list, or plist. + ________ ____ _____ The plist of an atom may be accessed/modified by the functions described below. (getplist ) Returns the plist associated with . must not be a number. (putplist ) places in 's plist table slot. (get ) Returns the data associated with (which must be atomic) in . (put ) Places in under the index . Note that the only significant difference between our definitions of put and get and those of other Lisp systems is that we + ___ ___ accept only a list as a plist, not an atom. Thus, our versions are + ____ somewhat more general in that the plist functions are not restricted to the plist cells of atoms. Page 8 1 V-mode Lisp Version III PE-T-800 28 Printing + ___________ (fw ) (fw) This is the file write operation. Execution of (fw ) + _ _ opens as the current output file unit. Thereafter, all printing functions will output to this file, rather than to the terminal. The output file units are stacked so that multiple calls to fw + _______ __ open files on different units, the most current being the one to which data is printed. Nesting may be up to 20 levels. Executing (fw) closes the current unit and returns output to the previous file in the stack. No extra new-lines or other characters are generated during the transition between files. See the Libraries for examples on the use of fw. + __ (tempfilename) Returns a unique temporary file name of the form "T$nnnn". (prinasc ) Prints the single character on the terminal determined using as an ascii code. This is useful for, among other things, device control. See the Libraries for some bindings of common ascii codes to variable names. It is wise, when doing device control with the printing functions, to execute (margin nil) (see below). (spaces ) Prints of spaces on the current output file (default: the terminal) (see fw for more details about output files). + __ (blanks ) Like spaces, except that nothing is printed; an atom consisting + ______ of the requested number of spaces is returned. Page 9 1 V-mode Lisp Version III PE-T-800 (margin) (margin t) (margin) turns margin off. The default margin is 80 characters; This default is set by executing (margin t). Be sure to turn off margin when doing device control. + ____________________________________________________ (slist ) Performs like the Primos slist command. Regardless of the current file input units (via co and fw), slist always prints the + __ __ _____ file on the user's terminal. 29 TTY Graphics + _______________ Lisp now supports limited graphics on our standard CRT's. This support is useful for graphics experimentation, and for drawing simple pictures; e.g., for technical documents. An interesting project to consider is the construction of a reasonably general TTY-graphics editor as a documentation aid. The functions below control the drawing of lines, points, and strings on the user terminal, or to a file in a form suitable for printing on a hard-copy device. The routines are designed to that graphics equipment, when available, may be used without changing Lisp-level code. The routines assume that the terminal screen is laid out so that the lower left of the screen is coordinate (0,0), i.e., normal first-quadrant Cartesian coordinates apply. These functions all accept integral or floating arguments. (point []) Places a point at , printing at that point (left-justified) if supplied. The default character is printed if is not supplied. is of the form ( ). After the point is printed, the cursor is left precisely at the point's coordinates. Page 10 1 V-mode Lisp Version III PE-T-800 (line []) Draws a line from to , using , if supplied, as the drawing character (as in point). + _____ The line-drawing algorithm used by line attempts to draw the + ____ smoothest line possible between the two points, at the expense of the line's linearity. The example below illustrates that this trade-off is appropriate for low-resolution terminals. (read_cursor) Returns the position, in the same format as in point, of the + _____ cursor on the CRT screen. (diff_read_cursor) Waits for a difference to be sensed in the cursor position, and returns the new position, saving it as the old. The following functions control the output of graphs to files, in a form suitable for hard-copy printing. (hard_graph {t/nil}) Turns the hard-copy mode on (t) or off (nil). When on, invoking + _ ___ the line or point routines causes an internal buffer to be filled with the graphics data, rather than the user's terminal. (print_graph) Prints the graphics buffer on the current output file unit; one may use fw to control the output file (see example below). + __ (clear_graph) Fills the graphics buffer with blanks. When printing multiple graphs, one per page, this function resets the graphics workspace. This operation was not included in print_graph because the user may + ___________ Page 11 1 V-mode Lisp Version III PE-T-800 wish to overlay several graphs, and print each stage to a separate page. Below is an example of a graph drawn using the above functions (see libraries for the programs) .fork . . . . .x .fork . . . . . . .caddr .x .x . . . . . . .add1 .cdr .car . . . . . . . .list . . . . .cons Page 12 1 V-mode Lisp Version III PE-T-800 30 Input + ________ (read [tty]) (read atom [tty]) (read line [tty]) read inputs a single s-expression from the current input file. + ____ read atom reads a line from the current input file as a literal atom. + _________ Typing a single carriage-return makes (read atom) return nil. read + ___ ____ line reads a line from the current input file and terminates the line + ____ as a list upon carriage-return. For example, typing a b c when (read line) is invoked returns (a b c). In all the above forms of read, tty if present forces the + ____ ___ terminal to be the input device, regardless of the current input file. (readchar [noecho]) Reads a single character from the terminal, using C1IN, and returns it as an atom. noecho, if present, turns off character + ______ echoing during this process. 31 Garbage Collection + _____________________ (gc) Garbage collection is invoked automatically whenever cons runs + ____ out of heap storage. The algorithm used is found in Knuth [8], and operates in standard mark-sweep manner, with pointer reversal to eliminate need for a stack. The user may invoke garbage collection by executing gc. This + __ will collect all cells up to the current heap point and chain them into a single free cell list. This list is used first to get free cells by subsequent executions of cons. The heap is used only when + ____ all cells in the free list are allocated. Page 13 1 V-mode Lisp Version III PE-T-800 (heap) Prints the address of the current bottom of the heap. 32 The Knowledge Representation Language FRL + ____________________________________________ Lisp now incorporates, as a set of primitives plus Lisp routines, the knowledge representation language FRL, as described by Goldstein and Roberts [1,2]. This language is based on the idea of frames [4] as fundamental + ______ chunks of knowledge that may be manipulated by a program. The language is mostly declarative, that is, concentrates on data + ___________ structure as opposed to procedure structure. It thus offers a clear way for users to describe processes and data according to the relationships among these entities. FRL has been used for office scheduling, text processing, natural language processing, and other applications [3]. It is a reasonably simple language, offering itself as a complementary component of, as opposed to a replacement for, Lisp. In implementing FRL, I have attempted to remain as close as possible to the definitions given in [2], although there are a few spots where I felt the implementation must be changed, either to (a) compensate for idiosyncracies of our system (or theirs) or (b), to smooth out parts of the original design that I concluded were unclear or not cleanly defined. The ">" character is now a special character; it is used as the prefix to fquery, and thus has special meaning (see the fquery + ______ ______ function in the FRL Primer). To use literally, or in a literal with a ">" prefix, enclose the literal in double quotes. To describe the differences between our implementation and that of [2], I have prepared an annotated FRL Manual, simply an annotated [2]. Copies of annotated and unannotated manuals are available in the Information Center. Because of the wealth of information available on FRL, I will not describe functions in this section. See the Libraries for an example of FRL in a simple application, as well as for my original source code to all functions used. The Quick Reference section does, however, contain short descriptions of FRL functions that have been added to Lisp as primitives. The FRL functions in the Libraries, which are coded in Lisp, contain descriptions with the source code. As they migrate to Lisp primitive status, the Quick Reference will be Page 14 1 V-mode Lisp Version III PE-T-800 updated. 33 Miscellaneous + ________________ lmember (lmember ) + _______ Similar to member, except that may be a list. + ______ Thus (lmember '(a b c) '(p q (a b c) r)) returns t. + _ quit (quit) + ____ or q q typed at the command level is now an abbreviation for + _ (quit). Once (quit) is invoked, one cannot re-enter Lisp by typing s; for temporary escapes to Primos, use pause. + _ _____ pause (pause) + _____ Escapes to Primos, allowing re-entrance to Lisp by typing s. + _ alist alist + _____ alist is a variable that returns the current alist when + _____ evaluated. Useful for debugging (see break, in the Libraries). + _____ Use care if you decide to alter the alist directly using this variable. nconc (nconc ) + _____ and are lists. nconc operates like append, except + _____ ______ that is attached directly onto the end to , using rplacd. + ______ Thus, when the copying provided by append is not needed, nconc is + ______ _____ somewhat more efficient. Page 15 1 V-mode Lisp Version III PE-T-800 Comments + ________ A "/*" appearing at the beginning of a line causes that line to be completely ignored by Lisp. Thus, any text may be placed after the "/*" and none of it will appear in the actual list structure. There is no corresponding "*/"; comments may not be placed in-line. blank + _____ blank is a variable bound to a single space. + _____ nullchar + ________ nullchar is a variable bound to the empty atom. Its + ________ character length (charlength) is zero. + __________ Comparisons + ___________ greaterp and lessp may now be used with string atoms, in + ________ _____ addition to the usual numbers. Strings, if supplied, will be compared on the basis of ascii collation sequence. Command Line + ____________ In invoking Lisp from Primos, a co filename may be given as + __ a command argument. Thus lisp expr_file will co expr_file, which may in turn co other files. + __ __ Atom Quoting ("xxx") + ____________________ One may now type in non-standard atoms into the Lisp system by surrounding them with double quotes. For example, typing "Hello how are you?" enters the system as the atom enclosed in the double quotes. Single quoting ("'") must still be done to suppress evaluation, so that "abc def" returns nil, whereas '"abc + ___ def" returns abc def. + _______ Page 16 1 V-mode Lisp Version III PE-T-800 One is not permitted to split a quoted string between lines. A missing double quote at the right end of a line causes the string from the last unbalanced double quote to the end of the line to be taken as the intended literal. To output non-standard atoms such that they may be read back verbatim, see the atomquote mode function below. + _________ fill + ____ (fill ) Appends nil-s to such that the length of is + ___ equal to . Thus, (fill '(a b c) 5) = (a b c () ()). nullreduce + __________ (nullreduce ) Returns nil if consists of a list of nil-s, or if + ___ ___ consists of lists that nullreduce to nil. Otherwise, + __________ ___ is returned. So, (nullreduce '(() () ())) = () and (nullreduce '(() (()()) ()) ) = (), but (nullreduce '(a () (()())) ) = (a () (()())) and (nullreduce '(() (()a)) ) = (() (()a)). root + ____ (root ) Takes left substring of , up to and not including first occurrence of a digit. So, (root 'abc10) = abc and (root 'abc10def) = abc. Used by fgename. + _______ suffix + ______ (suffix ) The opposite of root: takes the right substring of , + ____ after and including the first occurrence of a digit. Used by fgename. + _______ Page 17 1 V-mode Lisp Version III PE-T-800 prompt + ______ (prompt t) sets a mode where the user is prompted at command level with a ">". (prompt) turns this mode off. Default is off. atomquote + _________ (atomquote t) sets a mode where printing any atom surrounds + ___ that atom with double quotes. This is useful for saving structures that have non-standard atoms which you later wish to read back into Lisp. (atomquote) turns this mode off, which is the default. 34 Libraries + ____________ The ufd LISP>$SOURCE contains both shared (LI4000, LI2033, #LISP.SHARE) and unshared versions (#LISP) of the Lisp interpreter, and ufds that contain programs of interest. For the most part, code in the Libraries is self-explanatory. Comments may be found in the code. It is suggested that users wishing to use the Libraries I will not update anything in LISP without notice to users; compatibility at the source code level will be attempted, mostly by extending functions by adding arguments or by adding completely new functions. Page 18 1 V-mode Lisp Version III PE-T-800 35 Bibliography + _______________ 1. Goldstein, I.P. and R.B. Roberts, "The FRL Primer", MIT-AI Memo 408, July 1977. Available in Prime Info Ctr. 2. --, "The FRL Manual", MIT-AI Memo 409, September 1977. Available in Prime Info Ctr. 3. Winston, P.H. and R.H. Brown, eds.,"AI - an MIT Perspective", vol. I, MIT Press, 1979. Available from me or Prime Info Ctr. 4. Minsky, M., "A Framework for Representing Knowledge", in P.H. Winston, ed., "The Psychology of Computer Vision", McGraw-Hill, 1975. Available from me. 5. Stabile, L.A., "FP and its use as a Command Language", Compcon Fall 1980. Available from me or Prime Info Ctr. 6. "Interlisp Reference Manual", Xerox. Available in Prime Info Ctr. 7. Weissman, C., "Lisp 1.5 Primer", Dickenson, 19xx. Available from me. 8. Knuth, D.E., "The Art of Computer Programming", vol. 2, pg. 417. Page 19 1 V-mode Lisp Version III PE-T-800 36 Quick Reference + __________________ Below is a list of all functions available in Lisp, with an abbreviated description of each. In the text, we refer to <1>, <2>, etc. to mean 'the first arg', 'the second arg', etc. Note that single quotes (e.g., 'nil') are used as formal delimiters, in replacement for underlining (nil) as used in the + ___ previous sections. ****** '+' args_indef subr_type Adds its arguments. '-' args_indef subr_type If two args are given, returns <1> - <2>. If more than two args are given, returns <1> - <2> - <3> - ... - . '*' args_indef subr_type Returns the product of all its arguments. '/' args_2 subr_type Returns <1> / <2> '<' args_2 subr_type 't' if <1> < <2>, either numerically or alphabetically, else 'nil'. 'add1' args_1 subr_type Adds 1 to its argument. 'and' args_indef fsubr_type Returns last expression in arg list, if all expressions in arg list evaluate to non-nil, else nil. 'append' args_indef subr_type Page 20 1 V-mode Lisp Version III PE-T-800 Appends all args together, with no 'rplacd' (see nconc). 'append' here means "the elements of one list followed by the elements another". 'atom' args_1 subr_type 't' if arg is an atom, else 'nil'. 'atomquote' args_1 subr_type 't' turns on atom printing in quoted mode, so that all atoms are printed wit double quotes. Good for reading back non-standard atoms into Lisp. 'nil' as arg turns this off. 'backtrace' args_1 subr_type If arg is 'nil', backtrace is turned off. If arg is 't', backtrace is turned on. Default is on. 'blanks' args_1 subr_type Arg is a number. Returns a string of spaces as a single atom whose length is equal to the argument. 'car' args_1 subr_type Standard car function. Error if arg is atom. Similar definitions apply to 'cdr' and to cadr, caddr, etc. 'cdr' args_1 subr_type 'caar' args_1 subr_type 'cadr' args_1 subr_type 'cdar' args_1 subr_type 'cddr' args_1 subr_type 'caaar' args_1 subr_type 'caadr' args_1 subr_type Page 21 1 V-mode Lisp Version III PE-T-800 'cadar' args_1 subr_type 'caddr' args_1 subr_type 'cdaar' args_1 subr_type 'cdadr' args_1 subr_type 'cddar' args_1 subr_type 'cdddr' args_1 subr_type 'charlength' args_1 subr_type Arg is an atom. Returns number of characters in arg. Returns zero if arg not atom. 'clear_graph' args_1 subr_type No args. Fills graphics buffer with blanks (see TTY graphics, section 1 0). 'co' args_1 subr_type Argument is an atom, a filename. Switches input to that file. Co's may be nested to 20 levels. 'como' args_1 subr_type Obsolete 'cond' args_indef fsubr_type Standard 'cond' function. Implicit 'progn' in consequent clauses is supported. 'cons' args_2 subr_type Standard 'cons'. When 'gc' is explicitly invoked by the user, a free list is built that is used first in subsequent calls to 'cons'. Heap is used only when free list is 'nil'. 'cset' args_2 subr_type Page 22 1 V-mode Lisp Version III PE-T-800 Like 'set', but operates on permanent alist, the deepest part of the alist. 'csetq' args_2 fsubr_type Like 'setq', but operates on permanent alist, as in 'cset'. 'deframe' args_indef fsubr_type (deframe ... ) Defines a frame to FRL. Does not run attached procedures. 'deframe1' args_2 subr_type Like 'deframe', but evaluates args and takes a slot list as its second arg, rather than an indefinite number of args. 'defun' args_indef fsubr_type (defun ) Places the defined function under in the environment. 'difference' args_indef subr_type See '-'. 'diff_read_cursor' args_1 subr_type Returns the cursor position when a difference in that positio n is sensed (see TTY Graphics, section 10). 'eq' args_2 subr_type 't' if the two arguments are either the same atom or the same pointer. Unlike Interlisp, boxed floating numbers may be compared with 'eq'. 'equal' args_2 subr_type 't' if the two args have the same list structure, i.e., an 'eq' for lists. 'eval' args_2 subr_type (eval []) The evaluator. The current alist is used if no second arg is supplied. 'explode' args_1 subr_type Page 23 1 V-mode Lisp Version III PE-T-800 Arg is an atom. Returns a list of the component characters of that atom. 'fadd-comment' args_2 subr_type (fadd-comment ) Merges into . Returns modified . 'fassert' args_indef fsubr_type Like 'deframe', but attached procedures of the '$if-added' form will be run. 'fassert1' args_indef subr_type 'fassert', but evaluates args. 'fbucket' args_1 subr_type (fbucket ) Returns bucket portion of . 'fcommentp' args_3 subr_type (fcommentp