.INDENT 45 August 1985 .SPACE 18;CENTER LISP FOR A SERIES .SPACE 2 REDUCE SYSTEM FOR A SERIES .RESET;HEADER ,%,;TRAILER,,;BEGIN PAGE;PAGE 1;ON BLOCK;SPACE 2 The system provided has three REDUCE programs: LISP, REDUCE itself, and INTEGRATOR which includes REDUCE as a subset. It is assumed that the reader has read: .SPACE 1;INDENT 5 "REDUCE 2 USER'S MANUAL" (1) and .INDENT 5 "STANDARD LISP REPORT" (2) .SPACE 1 both of which are available from the Higher Education Software Library (and also from the Computer Science department at the University of Utah). .SPACE 1 This document describes (sketchily) what must be done to compile and run REDUCE. It also describes how to make changes in the REDUCE symbolic, recreate the necessary ALGOL files and subsequently recompile REDUCE. .SPACE 32 (1), (2) See the "References" section at the end of this document. .OFF BLOCK;SPACE 2;ON BLOCK 1. SYSTEM ORGANIZATION OVERVIEW .SPACE 1 The REDUCE system for the B7000/B6000 series consists of four parts: The REDUCE algebraic processor itself, a LISP processor, a LISP compiler which converts LISP programs to an intermediate language, and an assembler which converts the intermediate language to Burroughs ALGOL. The INTEGRATOR has a fifth part which is the integrator package. .OFF BLOCK;SPACE 1;ON BLOCK The algebraic processor, the compiler, the assembler and the integrator package are written in RLISP, a sort of LISP with ALGOL-like syntax. The LISP processor is written partly in ALGOL and partly in RLISP. All these parts are combined into a single large ALGOL program. The parts written in RLISP must first be translated to ALGOL. The algebraic processor does this translation. .OFF BLOCK;ON BLOCK The algebraic processor was largely written by Anthony Hearn, the compiler is the work of Anthony Hearn and Martin Griss, the assembler was done by John Fitch, the part of the LISP processor written in RLISP was done by John Fitch and Jed Marti. The integration package was developed at Cambridge by Arthur Norman, John Fitch, and Maryann Moore. The ALGOL portion of the LISP processor, originally an SDL program for the B1700 that was written by Fitch and Marti, was translated to ALGOL and subsequently modified by Dave Dahm. .OFF BLOCK;BEGIN PAGE;ON BLOCK;SPACE 2 2. COMPILING REDUCE .SPACE 1 It is assumed that the ALGOL compiler was compiled with "compile time facilities" included (dollar option CTPROC). If this is not so, DMALGOL can be used instead. There is a file called REDUCE2LISP/MAIN/REDUCE which has several ALGOL compile time options and several INCLUDE statements. Compiling this file will produce a REDUCE system. Similarly there is a file called INTEGRATOR. Compiling this file will produce a REDUCE system which can do symbolic integration. Also there is a file called LISP. Compiling this file will produce a LISP system. .OFF BLOCK;SPACE 1;ON BLOCK There is a file called REDUCE2LISP/COMP/REDUCE which will compile REDUCE with proper control statements. There are similar files for Lisp and Integrator. .OFF BLOCK;SPACE 2;ON BLOCK 2.1 ALGOL COMPILE TIME OPTIONS .SPACE 1 FASTLINK .BREAK If this option is set, REDUCE (LISP) procedures are tightly bound at ALGOL compile time, and may not be redefined at run time. If the option is reset, REDUCE procedures are loosely bound and may be redefined at any time. REDUCE will be faster if this option is set. .OFF BLOCK;SPACE 1;ON BLOCK SLOWSTACK .BREAK If this option is set, REDUCE (LISP) local variables will be kept in an array. If this option is reset, REDUCE local variables will be kept in the machine stack. REDUCE will be considerably faster if this option is reset; however, use of this option requires the use of the NEWP library. .OFF BLOCK;SPACE 1;ON BLOCK COUNT .BREAK If this option is set, REDUCE will gather statistics about the internal functioning of the system. Ordinarily this option will be reset. .OFF BLOCK;SPACE 2;ON BLOCK 2.2 RECOMMENDED OPTION SETTINGS If the usual mode of use is algebraic processing: .INDENT 10 all options reset. .SPACE 1 If speed is most important: .INDENT 10 FASTLINK .SPACE 2;OFF BLOCK;BEGIN PAGE;ON BLOCK 3. REBUILDING ALGOL FILES Occasionally it will be desirable to recreate the ALGOL files which were produced by the RLISP compilation process. This section describes how this is done. There is a file called "MAKER". When this file is loaded by REDUCE, the system will create two ALGOL symbolic files and a linkage file. These three files are called N/ALGOL, N/FORWARDS, and N/SPACE. For example after typing .INDENT 10;SPACE 1 RUN REDUCE .SPACE 1 one may type .SPACE 1;INDENT 10 IN "REDUCE2LISP/TORECREATE/MAKER/REDUCE"; .OFF BLOCK;SPACE 1;ON BLOCK This will cause REDUCE to read the file MAKER and create the N-files. .OFF BLOCK;ON BLOCK;SPACE 1 The files (N/ALGOL and N/FORWARDS) are not complete. For example they don`t have sequence numbers, are not of type ALGOL, and need to have some additional information appended. Also a program called LINKER needs to process N/QSPACE and create a special initialization file. This process is most conveniently done by running a CANDE schedule file called REDUCE2LISP/DO/REDUCE. Basically it will take the N-files, and three files called TACKY, PROCS, and UNKNOWNS and create new ALGOL files. QSPACE file and INIT file. It will also cause the compilation of the new version of REDUCE. Running REDUCE2LISP/DO/REDUCE requires the presence of two ALGOL programs: SEQUENCE and LINKER. .OFF BLOCK;SPACE 1;ON BLOCK After the successful running of this, the N-files may be discarded. .OFF BLOCK;ON BLOCK;SPACE 1 Similarly, new ALGOL files may be created for INTEGRATOR or LISP. .OFF BLOCK;BEGIN PAGE;ON BLOCK;SPACE 2 4. THE LISP SYSTEM The version of LISP is "STANDARD" LISP as defined in (2). Our implementation has the following differences (this list is not exhaustive). .SPACE 1;ON SUBPARA 10;UNDENT 3 a) Floating point has not been implemented .SPACE 1;UNDENT 3 b) Several LISP functions have been provided which are not specified in (2). Among these are: .OFF SUBPARA;SPACE 1;ON SUBPARA 13;UNDENT 3 1) LENGTHC, the character length of an atom if printed by PRIN2. .SPACE 1;UNDENT 3 2) REVERSIP, the reversal in place of its argument using RPLACD .SPACE 1;UNDENT 3 3) LIST2, LIST3, LIST4, LIST5 .SPACE 1;UNDENT 3 4) NCONS and XCONS .SPACE 1;UNDENT 3 5) FACTORIAL, the factorial of its argument .SPACE 1;OFF SUBPARA;OFF BLOCK;ON BLOCK To use REDUCE as a LISP processor, run REDUCE and then type "END;". This will cause LISP to be entered. Typing "(BEGIN)" will cause REDUCE to be reentered. .OFF BLOCK;BEGIN PAGE;ON BLOCK;SPACE 2 5. MISCELLANEOUS OPERATIONAL CHARACTERISTICS .SPACE 1 5.1 ?HI .INDENT 5 Typing ?HI will elicit a response giving some information about the present state of processing. This should be expanded in the future. .OFF BLOCK;SPACE 1;ON BLOCK 5.2 ?HI 1 .INDENT 5 This will cause the present computation to abort and return to REDUCE or LISP command level. .OFF BLOCK;SPACE 1;ON BLOCK 5.3 ?END .INDENT 5 Typing ?END will return you to the system in a controlled fashion and give some information about what happened during the run. .OFF BLOCK;SPACE 1;ON BLOCK 5.4 GCFLAG .INDENT 5 Typing "ON GCFLAG" will cause garbage collection to print statistics about garbage collection. Typing "OFF GCFLAG" will shut off these messages. .OFF BLOCK;SPACE 1;ON BLOCK 5.5 SETTRACE .INDENT 5 Typing "ON SETTRACE" will cause a trace of all interpreted SET or SETQ function executions. Typing "OFF SETTRACE" will turn off this trace. .OFF BLOCK;SPACE 1;ON BLOCK 5.6 PROGTRACE .INDENT 5 Typing "ON PROGTRACE" will cause a trace of all interpreted functions at the first level of PROG, PROGN, or COND. .SPACE 2;OFF BLOCK;ON BLOCK 5.7 CONTROLLING STORAGE ALLOCATION .SPACE 1 The free storage pool is divided into 2 arrays, one array for CAR and one array for CDR. Each of these arrays is divided into 256 word pages. Therefore, a "page" of free space is 512 words - 256 words for CAR and 256 words for CDR. The LISP processor uses the CORE estimate to control the number of pages used. This is set to 150 000 words at compile time, but the user may change this at run time. The formula used is: .SPACE 1;INDENT 5 PAGES = (COREESTIMATE - 50000)/512 .OFF BLOCK;SPACE 1;ON BLOCK For example: .SPACE 1;INDENT 5 RUN REDUCE; CORE = 70000 .SPACE 1 will use 40 pages (each page being 512 words: 2 array rows of 256 words each). The maximum number of pages allowed is 256. This may be increased by changing the DEFINE for PPAGEMAX in REDUCE2LISP/INCLUDE/ALGOL. .SPACE 2;OFF BLOCK;ON BLOCK 5.8 INPUT/OUTPUT .SPACE 1 The REDUCE IN statement may have as its parameter: .SPACE 1;ON SUBPARA 10;UNDENT 3 1) an ID e.g. `MYFILE .SPACE 1;UNDENT 3 2) a STRING e.g. "MYFILE" or "MY/FILE" or .INDENT 15 "MY/FILE ON THEPACK" .UNDENT 3 3) a list e.g. `(MYFILE 100 900) .SPACE 1;OFF SUBPARA;OFF BLOCK;ON BLOCK The action of the first two options are obvious. The third option reads the records of the file MYFILE between sequence numbers 100 and 900 only. .OFF BLOCK;SPACE 1;ON BLOCK Similar options are available for the OPEN statement. .OFF BLOCK;SPACE 1;ON BLOCK If the name of the file is PRINTER, the output will be directed to the line printer. .OFF BLOCK;OFF HEADER;BEGIN PAGE;SPACE 2;CENTER REFERENCES .RESET;SPACE 2;ON SUBPARA 4;UNDENT 4;SCORE & (1) A.C. Hearn &REDUCE 2 USER'S MANUAL&&, University of Utah, March 1973 On the Higher Education Software Library, this documentation is on the file REDUCE2LISP/DOC/REDUCE. .SPACE 1;UNDENT 4;SCORE & (2) J.B. Marti, A.C. Hearn, M.L. Griss, C. Griss, &STANDARD LISP&& .SCORE & &REPORT, University of Utah, January 1978. .BREAK On the Higher Education Software Library, this document is on the file REDUCE2LISP/DOC/LISP. .OFF SUBPARA;SPACE 2;CENTER;ON HEADER;BEGIN PAGE;PAGE 1;HEADER ,A-%, APPENDIX .RESET;SPACE 2;ON SUBPARA 5;UNDENT 5;ON BLOCK REDUCE2LISP/TORECREATE/ASSEMBLER (RLISP symbolic) .BREAK This code converts the intermediate language to ALGOL. .SPACE 1;UNDENT 5;OFF BLOCK;ON BLOCK REDUCE2LISP/TORECREATE/B6700 (RLISP symbolic) .BREAK This code includes various machine specific changes to REDUCE. .SPACE 1;UNDENT 5;OFF BLOCK;ON BLOCK REDUCE2LISP/TORECREATE/COMPILER (RLISP symbolic) .BREAK This code converts LISP to the intermediate form. .SPACE 1;UNDENT 5;OFF BLOCK;ON BLOCK REDUCE2LISP/MAIN/INTEGRATOR (ALGOL symbolic) .BREAK This file contains option setting and INCLUDE statements to paste together the various ALGOL files. Compiling this file produces OBJECT/INTEGRATOR. .SPACE 1;UNDENT 5;OFF BLOCK;ON BLOCK REDUCE2LISP/DO/INTEGRATOR (CANDE schedule file) .BREAK This file converts N-files to sequenced ALGOL files, creates an INIT file, and does the ALGOL compilation for INTEGRATOR. This is the final pass of rebuilding INTEGRATOR. .SPACE 1;UNDENT 5;OFF BLOCK;ON BLOCK REDUCE2LISP/GENERATED/INTEGRATOR/ALGOL (ALGOL symbolic) .BREAK This is the ALGOL translation of the integration package. .SPACE 1;UNDENT 5;OFF BLOCK;ON BLOCK REDUCE2LISP/GENERATED/INTEGRATOR/FORWARDS (ALGOL symbolic) .BREAK This file contains the FORWARD declarations for the procedures in REDUCE2LISP/GENERATED/INTEGRATOR/ALGOL. .SPACE 1;UNDENT 5;OFF BLOCK;ON BLOCK REDUCE2LISP/GENERATED/INTEGRATOR/INIT (Binary file - internal LISP representation. .BREAK Initialization file for INTEGRATOR. .SPACE 1;UNDENT 5;OFF BLOCK;ON BLOCK REDUCE2LISP/GENERATED/INTEGRATOR/PROCS (ALGOL symbolic) .BREAK This file contains copies of the procedure declarations in INTEGRATOR. It is used to produce TRACEBACK information. .SPACE 1;UNDENT 5;OFF BLOCK;ON BLOCK REDUCE2LISP/GENERATED/INTEGRATOR/QSPACE (Legible file) .BREAK Input to LINKER (creates INIT file) .SPACE 1;UNDENT 5;OFF BLOCK;ON BLOCK REDUCE2LISP/TORECREATE/MAKER/INTEGRATOR (RLISP symbolic) .BREAK This file, used as input to REDUCE, will rebuild the INTEGRATOR N-files. .SPACE 1;UNDENT 5;OFF BLOCK;ON BLOCK REDUCE2LISP/INCLUDE/RLISP/INTEGRATOR (RLISP symbolic) .BREAK This code is the integration package. .SPACE 1;UNDENT 5;OFF BLOCK;ON BLOCK REDUCE2LISP/MAIN/LINKER (ALGOL symbolic) .BREAK This is the symbolic for the LINKER program. This program reads QSPACE file ( a legible file) and creates the INIT file (a binary file). .SPACE 1;UNDENT 5;OFF BLOCK;ON BLOCK REDUCE2LISP/MAIN/LISP (ALGOL symbolic) .BREAK This file contains option settings and INCLUDE statements to paste together the various ALGOL files. Compiling this procedure produces OBJECT/LISP. .UNDENT 5;OFF BLOCK;SPACE 1;ON BLOCK REDUCE2LISP/INCLUDE/ALGOL (ALGOL symbolic) .BREAK This is the symbolic for the ALGOL portion of the LISP processor. .SPACE 1;UNDENT 5;OFF BLOCK;ON BLOCK REDUCE2LISP/DO/LISP (CANDE schedule file) .BREAK This file converts N-files to sequenced ALGOL files, creates an INIT file, and does the ALGOL compilation for LISP. This is the final pass of rebuilding LISP. .SPACE 1;UNDENT 5;OFF BLOCK;ON BLOCK REDUCE2LISP/GENERATED/LISP/ALGOL (ALGOL symbolic) .BREAK This is the ALGOL translation of RDUCE2LISP/MAIN/RLISP/LISP .SPACE 1;UNDENT 5;OFF BLOCK;ON BLOCK REDUCE2LISP/GENERATED/LISP/FORWARDS (ALGOL symbolic) .BREAK This file contains the FORWARD declarations for the procedure in REDUCE2LISP/GENERATED/LISP/ALGOL. .SPACE 1;UNDENT 5;OFF BLOCK;ON BLOCK REDUCE2LISP/GENERATED/LISP/INIT (Binary file - internal LISP representation/initialization file for LISP. .SPACE 1;UNDENT 5;OFF BLOCK;ON BLOCK REDUCE2LISP/GENERATED/LISP/PROCS (ALGOL symbolic) .BREAK This file contains copies of the procedure declarations in LISP. It is used to produce TRACEBACK information. .SPACE 1;UNDENT 5;OFF BLOCK;ON BLOCK REDUCE2LISP/GENERATED/LISP/QSPACE (legible file) .BREAK Input to LINKER (creates INIT file) .SPACE 1;UNDENT 5;OFF BLOCK;ON BLOCK REDUCE2LISP/TORECREATE/MAKER/LISP .BREAK This file, used as input to REDUCE, will rebuild the LISP N-files. .SPACE 1;UNDENT 5;OFF BLOCK;ON BLOCK REDUCE2LISP/INCLUDE/RLISP/LISP (RLISP symbolic) .BREAK This is the symbolic for the RLISP portion of the LISP processor. .SPACE 1;UNDENT 5;OFF BLOCK;ON BLOCK REDUCE2LISP/TORECREATE/MACROS (RLISP symbolic) .BREAK The file is used by the LISP compiler during a rebuild. .SPACE 1;UNDENT 5;OFF BLOCK;ON BLOCK REDUCE2LISP/TORECREATE/PROCS (ALGOL symbolic) .BREAK This file contains copies of the procedure declarations in LISP/ALGOL. It is used by the schedule files to produce the PROCS files. .SPACE 1;UNDENT 5;OFF BLOCK;ON BLOCK REDUCE2LISP/MAIN/REDUCE (ALGOL symbolic) .BREAK this file contains option settings and INCLUDE statements to paste together the various ALGOL files. Compiling this file produces OBJECT/REDUCE. .UNDENT 5;SPACE 1;OFF BLOCK;ON BLOCK REDUCE2LISP/DO/REDUCE (CANDE schedule file) .BREAK This file converts N-files to sequenced ALGOL files, creates an INIT file, and does the ALGOL compilation for REDUCE. This is the final pass of rebuilding REDUCE. .UNDENT 5;OFF BLOCK;ON BLOCK;SPACE 1 REDUCE2LISP/GENERATED/REDUCE/ALGOL (ALGOL symbolic) .BREAK This is the ALGOL translation of REDUCE. .SPACE 1;UNDENT 5;OFF BLOCK;ON BLOCK REDUCE2LISP/GENERATED/REDUCE/FORWARDS (ALGOL symbolic) .BREAK This file contains the FORWARD declarations for the procedures in REDUCE2LISP/GENERATED/REDUCE/ALGOL. .SPACE 1;UNDENT 5;OFF BLOCK;ON BLOCK REDUCE2LISP/GENERATED/REDUCE/INIT (Binary file - internal LISP representation) .BREAK Initialization file for REDUCE. .SPACE 1;UNDENT 5;OFF BLOCK;ON BLOCK REDUCE2LISP/GENERATED/REDUCE/PROCS (ALGOL symbolic) .BREAK This file contains copies of the procedure declarations in REDUCE. It is used to produce TRACEBACK information. .SPACE 1;UNDENT 5;OFF BLOCK;ON BLOCK REDUCE2LISP/GENERATED/REDUCE/QSPACE (Legible file) .BREAK Input to LINKER (creates INIT file). .SPACE 1;UNDENT 5;OFF BLOCK;ON BLOCK REDUCE2LISP/TORECREATE/MAKER/REDUCE (RLISP symbolic) .BREAK This file, used as input to REDUCE, will rebuild the REDUCE N-files. .SPACE 1;UNDENT 5;OFF BLOCK;ON BLOCK REDUCE2LISP/INCLUDE/RLISP/REDUCE (RLISP symbolic) .BREAK This code is the algebraic processor. .SPACE 1;UNDENT 5;OFF BLOCK;ON BLOCK REDUCE2LISP/TEST/REDUCE (REDUCE symbolic) .BREAK This is a test file. If REDUCE correctly processes this file, things are in pretty good shape. .SPACE 1;UNDENT 5;OFF BLOCK;ON BLOCK REDUCE2LISP/MAIN/SEQUENCE (ALGOL symbolic) .BREAK This is the symbolic for the SEQUENCE program which sequences the N-files. It is used while running a schedule file. .SPACE 1;UNDENT 5;OFF BLOCK;ON BLOCK REDUCE2LISP/TORECREATE/STARTLISP (RLISP symbolic) .BREAK This file is used to REDUCE when doing an RLISP compilation. .SPACE 1;UNDENT 5;OFF BLOCK;ON BLOCK REDUCE2LISP/TORECREATE/TACKY .BREAK This file is used by the schedule files to produce QSPACE files. .SPACE 1;UNDENT 5;OFF BLOCK;ON BLOCK REDUCE2LISP/TEST/LISP (LISP symbolic) .BREAK This is a test file. When using REDUCE as a LISP processor, this file will test many LISP primitives. .SPACE 1;UNDENT 5;OFF BLOCK;ON BLOCK REDUCE2LISP/TORECREATE/TRACE (RLISP symbolic) .BREAK This file contains RLISP procedures which will allow selective tracing of interpreted routines. .SPACE 1;UNDENT 5;OFF BLOCK;ON BLOCK REDUCE2LISP/TORECREATE/UNKNOWNS (ALGOL symbolic) .BREAK This file contains empty definitions of procedures which have not been implemented.