A package of LISP functions, collectively called MULTI, which extends LISP 1.5 to multiprogremming is presented.MULTI defines the notion of a process within a LISP implementation using function invocation as the only control primitive.A process is an executable entity consisting of a process template and a set of register values.The process template defines the operations the process carries out. Process environments are saved in what can be viewed as function call instances, i.e. LISP forms which have the name of a process template in functional position and the register values following it. The flexibility of this simple conceptualization of processes is demonstrated by several examples which use MULTI to implement recursion, backtracking, generators, agendas and AND/OR graph searching. The implementation of MULTI does not assume that the host LISP system provides any data or control environment saving mechanisms such as FUNARG or INTERLISP's spaghetti stack. Thus, MULTI is portable to other LISP systems.is OR, could be proved by trying to show each of the P.'s in "parallel" and terminating the proofs of al~ the other disJuncts as soon as any one is proved.This "chronological" approach to disjunction is similar to the OR of Friedman and Wise[9] and the EITHER of Baker and Hewitt[2] which returns true as soon as any disJunct evaluates to true.
This paper presents a general overview of MULTI and gives several examples.The examples are intended to show the flexibility of the system and to demonstrate the utility of the notion of a process in programming.We are not proposing MULTI as a progr~mmlng language but rather explaining in detail a system that we have been using for several years.Our current implementation of MULTI has been influenced by practicality, i.e. how to interface with ALISP [16] and how to write, debug and maintain programs which use MULTI.Debugging facilities available to a MULTI user in ALISP are detailed in a separate report [21].
General DescriDtion of MULTI