--- --- PAGE 1 COVER * * * * * ****** ****** ******* * * ** * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ** * * * * * * * * ******** * * * ****** ******* **** ******* * ** * * * * * * * * * * * * * * * * * * ********* * * * * * * * * * * * * * * * * * * * * ****** * ****** * ******* THE REFERENCE MANUAL --- --- PAGE 2 COVER IF MANY FAULTES IN THIS BOOK YOU FYNDE, YET THINK NOT THE CORRECTORS BLYNDE; IF ARGOS HEERE HYMSELFE HAD BEENE HE SHOULD PERCHANCE NOT ALL HAVE SEENE. RICHARD SHACKLOCK...1565 FIRST PRINTING 2 DEC 1980 LAST REVISED 20 FEB 1983 THE INFORMATION IN THIS DOCUMENT IS SUBJECT TO CHANGE WITHOUT NOTICE AND SHOULD NOT BE CONSTRUED AS A COMMITIMENT BY Yasuyuki Kinoshita. Yasuyuki Kinoshita ASSUMES NO RESPONSIBILITY FOR ANY ERRORS THAT MAY APPEAR IN THIS DOCUMENT. THE SOFTWARE DESCRIBED IN THIS DOCUMENT IS FURNISHED UNDER A LICENSE AND MAY ONLY BE USED OR COPIED IN ACCORDANCE WITH THE TERMS OF SUCH LISENCE. NO RESPONSIBILITY ASSUMED FOR THE USE OR RELIABILITY OF SOFTWARE ON EQUIPMENT THAT IS NOT SUPPLIED BY Yasuyuki Kinoshita OR ITS AFFILIATED COMPANIES. COPYRIGHT (C) 1982 BY Yasuyuki Kinoshita COPYRIGHT (C) 1982 BY Hashimoto-lab, University of Electro-Communications PRINTED IN TOKYO JAPAN --- --- PAGE 3 TABLE OF CONTENTS -----TABLE OF CONTENTS----- SECTION TITLE PAGE <1> OVERVIEW 4 INTRODUCTION TO LISP <2> HALISP-B SYSTEM 5 HALISP-B SYSTEM REQUIREMENTS GETTING STARTED START UP FILE 7 SPECIAL CONTROL KEYS <3> SYNTACTIC DEFINITIONS 8 HALISP SYNTAX READ MACRO 10 QUASI-QUOTE READ MACRO 11 <4> FUNCTION DEFINITION 13 FUNCTION TYPES DEFINITION OF THE FUNCTION MACRO FACILITY 14 DEFINITION AUTO LOADING MECHANISM 15 <5> BUILT-IN FUNCTIONS 16 ARGUMENTS NOTATION FUNCTION NOTATION BUILT-IN FUNCTIONS AND MACROS [1] ELEMENTARY FUNCTIONS AND PREDICATES 16 [2] LIST MANIPULATION FUNCTIONS 22 [3] EVALUATION SEQUENCE CONTROL FUNCTIONS 27 [4] PROPERTY LIST MANIPULATION FUNCTIONS 34 [5] MAP FUNCTIONS 36 [6] ARITHMETIC FUNCTIONS AND PREDICATES 40 [7] INPUT/OUTPUT FUNCTIONS 44 [8] DEBUGGING FUNCTIONS 50 [9] FUNCTION DEFINITION FUNCTIONS 51 [10] DATA TYPE & STORE MACRO 53 [11] SYSTEM SWITCHES AND MISCELLANEOUS 54 [12] PRIMITIVES FOR COMPILER 60 [13] SPECIAL DEVICE FUNCTIONS 60 [14] SYSTEM CONSTANTS AND INDICATORS 61 <6> ERROR FUNCTION 62 IMPLEMENTATION OF ERROR RECOVERING DEFINITION OF THE TYPICAL ERROR FUNCTION EXAMPLES OF ERROR RECOVERING 63 <7> FUNCTION TRACER 65 DEFINITION OF THE TYPICAL TRACER FUNCTION APPENDICES APPENDIX A: FATAL ERRORS 66 APPENDIX B: DATA DRIVEN PROGRAMMING 67 APPENDIX C: DEBUGGING 70 APPENDIX D: VIRTUAL FUNCTION TECHNIQUE // APPENDIX E: RESTRICTIONS 72 APPENDIX F: SPECIAL LAMBDA BINDER 72 APPENDIX G: MEMORY MAP 73 APPENDIX H: TYPICAL DEFINITIONS OF BUIT-IN'S -- --- --- PAGE 4 OVERVIEW <1> OVERVIEW --INTRODUCTION TO LISP-- LISP IS SIMPLE AND DIFFICULT, ELEGANT AND AD HOC; IT IS A BEAUTIFUL BLEND OF FORESIGHT AND FORTUITY. LISP IS A PROGRAMMING LANGUAGE, OFTEN CHARACTERIZED AS A SPECIAL PURPOSE LIST-PROCESSING LANGUAGE. BUT LISP IS NO MORE A SPECIAL PURPOSE PROGRAMMING LANGUAGE THAN MATHMATICS IS A SPECIAL PURPOSE LANGUAGE FOR FLOATING-POINT COMPUTATIONS. JUST AS THERE'S MORE MATHEMATICS THAN THE ACCOUNTING AND BOOKKEEPING PROPERTIES PRESENT IN "GENERAL PURPOSE" PROGRAMMING LANGUAGES, THERE'S MUCH MORE TO LISP THAN "JUST ANOTHER PROGRAMMING LANGUAGE." THE BEST DESCRIPTION OF THE LISP PROGRAMMING LANGUAGE IS THAT IT IS A "HIGH LEVEL MACHINE LANGUAGE." THAT IS, IT SHARES MANY OF THE FACETS OF CONTEMPORARY MACHINE LANGUAGE - THE NECESSITY FOR ATTENTION TO DETAIL AND THE FREEDOM TO MANIPULATE THE MACHINE'S DATA AND PROGRAMMS WITHOUT RESTRICTION - YET LISP IS HIGH LEVEL IN THAT THE LANGUAGE CONTAINS EXPRESSIVE POWER AND CONVENIENCE OF TRADITIONAL HIGH LEVAL LANGUAGES. THE CONTRADICTION IS RESOLVABLE: A LISP MACHINE IS JUST A HIGHER LEVEL MACHINE WHOSE DATA ITEMS ARE ORGANIZED DIFFERENTLY FROM THE BINARY BIT PATTERNS OF MOST MACHINES, AND THE LISP PROGRAMMING LANGUAGE IS THE "ASSEMBLY LANGUAGE" FOR THIS MACHINE. - JOHN ALLEN FROM BYTE AUG79 - --- --- PAGE 5 HALISP-B SYSTEM <2> HALISP-B SYSTEM --THE HALISP-B-- THE HALISP-B IS THE LATEST IN A SERIES OF THE HALISP LIST PROCESSOR. THE SYSTEM USES BULK MEMORY AS THE LIST CELL SPACE THAT IS COMPLETELY INDEPENDENT OF CPU'S MAIN MEMORY SPACE. SO THAT THIS EFFECTS AN EFFICIENT USAGE OF BOTH BULK AND MAIN MEMORY. --SYSTEM REQUIREMENTS-- HALISP-B RUNS ON DEC PDP-11 SERIES PROCESSOR UNDER THE STANDARD RT-11 OPERATING SYSTEM WITH THE BULK MEMORY WHICH IS ALSO SUPPLIED BY Hashimoto-lab, University of Electro-Communications. --GETTING STARTED-- FIRST, MAKE SURE THAT THE FILE NAMED "LISP.SAV" IS ON THE SYSTEM DISK DEVICE "SY:", AND THE POWER SWITCH OF THE BULK MEMORY IS ON. IF YOU ARE ENTERED THE KEYBOAD MONITOR FROM THE SYSTEM STARTUP, NOW YOU MAY TYPE, .R LISP AND IN A FEW SECONDS HALISP WILL BE UP AND THE NEXT MESSAGES WILL APPEAR. HALISP-B 0001 65300 CELLS FREE 7168 WORDS FOR STACK 7982 WORDS FOR DAS : MEANS PRESSING THE CARRIAGE RETURN KEY. THE 2'ND LINE OF THIS MESSAGE DISPLAYS THE SYSTEM INFORMATION ABOUT ITS FREE SPACES. "DAS" STANDS FOR "DYNAMIC ALLOCATED SPACE". AT THIS POINT, HALISP WAIT FOR YOUR S-EXPRESSION INPUT: TO THE ARGUMENT OF FUNCTION "EVAL". THIS ARGUMENT IS CALLED "FORM", AND "EVAL" IS CALLED "UNIVERSAL FUNCTION" IN LISP. NEXT THE ENTERING MESSAGES THERE IS A COLON MARK WHICH IS THE PROMPT CHARACTER THAT INDICATES THE SYSTEM CONTROL IS IN "READ" - A PRIMITIVE I/O FUNCTION OF LISP. HERE HALISP READS ONE S-EXPRESSION, AND "EVAL" FUNCTION EVALUATES THE READ FORM, THEN THE SYSTEM PRINTS THE VALUE. HALISP REPEATS ONLY THIS PROCEDURE ETERNALLY. FOR EXSAMPLE, :(CAR(QUOTE(A B C D)) THEN HALISP WILL RESPOND, A RESPONSES ARE INDENTED BY TWO SPACES. --- --- PAGE 6 HALISP-B SYSTEM DO ANOTHER, :(CDR '(A B C D)) (B C D) AN S-EXPRESSION TAGGED A SINGLE QUOTATION MARK IS PARSED TO BE QUOTED VALUE. SO IT EQUALS TO THE FUNCTION "QUOTE". IF YOU ARE UNFAMILIAR WITH LISP NOW INVOKE DEMO-PROGRAM TO SHOW YOU ITS ABILITY, AND POWER. THIS PROGRAM DIFFERENTIATE A SIMPLE NUMERICAL EXPRESSION THAT YOU WANT. TRY TO TYPE, :(DIFF) THEN HALISP WILL BEGIN TO READ THE PROGRAM FROM DISK. AFTER ABOUT A FEW SECONDS HALISP FINISH IT AND PRINT MESSAGE, THE DERIVATIVE OF 3*X^3+2*X^2+X+3 WITH RESPECT TO X IS 9*X^2+4*X+1 THE DERIVATIVE OF 3*(X^2+X)+2*X^3 WITH RESPECT TO X IS 3*(2*X+1)+6*X^2 THE DERIVATIVE OF BYE BYE : THE NEXT DEMO-PROGRAM IS FAMOUS AS "DOCTOR" OR "ELIZA" PROGRAM. THIS PROGRAM INTERACT WITH PERSONS MUCH LIKE THE WAY ONE TYPE OF PSYCHIATRIST INTERACTS WITH A PATIENT ON THE COUCH. NOW CALL HIM UP, :(DOCTOR) TELL ME YOUR PROBLEM. --- --- PAGE 7 HALISP-B SYSTEM MY NAME IS TOM. I HAVE NO INTEREST IN NAMES. I DO NOT LIKE COMPUTERS. DO MACHINES FRIGHTEN YOU? NOT LIKE MY MOTHER. TELL ME MORE ABOUT YOUR FAMILY. YES. PLEASE DO NOT BE SHORT WITH ME. I AM WORRIED ABOUT FOOD. HOW LONG HAVE YOU BEEN WORRIED ABOUT FOOD. --START UP FILE-- IF A LISP FILE NAMED "STARTL.LSP" IS ON DEFAULT DISK DEVICE "DK:" WHEN YOU START HALISP, THAT FILE IS AUTOMATICALLY LOADED AND EXCUTED. THE REASON WHY THIS FILE IS NECESSARY IS ONE THAT SOME SYSTEM PROVIDED READ MACROS CAN'T BE LOADED WHEN NEEDED. ANOTHER ONE IS THAT IT ALLOWS YOU TO CREATE A "TURNKEY" SYSTEM. IF YOU STORE PROGRAM WHICH IS OFTEN USED INTO THIS FILE, YOU DON'T HAVE TO DO ANY SET UP PROCEDURES TO START IT. --SPECIAL CONTROL KEYS-- THREE SORTS OF SPECIAL ACTIONS CAN BE INVOKED BY SEQUENCES OF SOME CONTROL KEYS WHICH ARE FOLLOWING, EXITS FROM HALISP TO KEYBOAD MONITOR. BREAKES YOUR PROGRAM EXCUTION. THIS SEQUENCE ONLY WORKS WHEN YOUR PROGRAM IS BEING EXCUTED.