perm filename BLURB.PUB[L70,TES] blob sn#009958
filedate 1972-09-27 generic text, type T, neo UTF8
00100 The following is slightly out-of-date and slightly inaccurate, but
00200 gives the correct flavor.
00500 LISP70 is intended to be an improvement on LISP 1.6 in the following
00800 /A/ Extendability. Programs may be written in SEXPR-70,
00900 which is compatible with LISP, or in MEXPR-70, an Algol-like notation
01000 that may be extended or modified by the user to suit his notational
01100 preferences. The concept of "entity" subsumes the concepts of atom,
01200 list, variable, and constant. Every entity has a "type" property,
01300 and depending on the type, may have other properties as well, such as
01400 "name", "value", "car", etc. Various access methods can be used to
01500 find and process entities, depending on their scope, type, or other
01600 features. The repertoire of access methods and types is easily
01700 augmented to improve both notational convenience and implementation
01800 efficiency. All levels of the system are written in a parametric and
01900 flexible manner to enable extensions and modifications to be easily
02000 made. Machine-dependent portions of the system are clearly isolated
02100 to assist in the implementation of LISP70 on other computers.
02300 /B/ Backtracking. In problems involving exploration of
02400 a problem tree or maze, primitives are provided to save, restore,
02500 delete, and re-order states of the search. From these primitives, a
02600 variety of depth-first and breadth-first search functions are easily
02900 /C/ Pattern Matching. Programs can be driven not only by
03000 recursive functions but also by pattern rewrite rules. A rule can be
03100 activated by referring to its name or by a standard or user-defined
03200 finding algorithm. These facilities are extremely useful in parsing
03300 and theorem proving.
03500 /D/ Processes. The FUNARG device is generalized to
03600 allow coroutines with OWN variables that are preserved from call to
03700 call. Normal functions are the special case of processes with no OWN
03800 variables that are created when called and destroyed when exited.
04000 /E/ Storage Allocation. Storage spaces for each type of
04100 entity (car-cdr, atom, binary program, local variables, etc.) are
04200 allocated dynamically. System routines are shared in upper segment.
04300 Thus, a job can start in a small core image and adjust its size as
04400 needed. Descriptors of functions and of large data structures have a
04500 presence bit so their referents can be swapped in and out by segments
04600 or by pages.