Path: utzoo!utgpu!news-server.csri.toronto.edu!cs.utexas.edu!sun-barr!lll-winken!uwm.edu!rpi!uupsi!njin!princeton!siemens!demon.siemens.com From: pjd@demon.siemens.com (dr. funk) Newsgroups: comp.edu Subject: Logo ES (interpreter) Message-ID: <54194@siemens.siemens.com> Date: 1 Mar 91 14:14:09 GMT Sender: news@siemens.siemens.com Distribution: na Organization: siemens corporate research inc Lines: 180 TO NL PR [] END TO EXEC.RULES :RULES LABEL "ERL IF EMPTYP :RULES [OP "TRUE] IF EXEC.RULE FIRST :RULES [OP "FALSE] MAKE "RULES (BF :RULES) GO "ERL END TO EXEC.RULE :RULE MAKE "COND FIRST BF :RULE MAKE "NOTICED.ITEMS [] IF NOT MATCH.LOOP :COND [OP "FALSE] MIGRATE.LOOP :NOTICED.ITEMS PRE.TRACE FIRST :RULE EXEC.LOOP LAST :RULE POST.TRACE OP "TRUE END TO MATCH.LOOP :LIST LABEL "ML IF EMPTYP :LIST [OP "TRUE] IF MATCH FIRST :LIST :PAD [MAKE "LIST (BF :LIST) GO "ML] [OP "FALSE] END TO RULE :WORD MAKE "NAME :WORD MAKE "PRED [] MAKE "ACTION [] END TO PRE.TRACE :NAME PR SE [Executing rule] :NAME END TO EXEC.LOOP :LIST LABEL "EL IF EMPTYP :LIST [STOP] EXEC.ACTION SUB.ITEM FIRST :LIST MAKE "LIST (BF :LIST) GO "EL END TO POST.TRACE PR [Pad after execution.] PRETTY :PAD END TO SHOVE :ITEM MAKE "PAD FPUT :ITEM :PAD END TO MARK :ITEM MAKE "PAD DELETE :ITEM :PAD MAKE "PAD FPUT (LIST "Marked :ITEM) :PAD END TO MIGRATE.LOOP :LIST LABEL "ML IF EMPTYP :LIST [STOP] MIGRATE FIRST :LIST MAKE "LIST (BF :LIST) GO "ML END TO MATCH :PATTERN :LIST LABEL "ML IF EMPTYP :LIST [OP "FALSE] IF MATCH.ITEM :PATTERN FIRST :LIST [REMEMBER FIRST :LIST OP "TRUE] MAKE "LIST (BF :LIST) GO "ML END TO NOTICE :ITEM MAKE "NOTICED.ITEMS [] IF MATCH :ITEM :PAD [MIGRATE.LOOP :NOTICED.ITEMS] END TO REMEMBER :ITEM MAKE "NOTICED.ITEMS FPUT :ITEM :NOTICED.ITEMS END TO SYMBOL :P :W IF (FIRST :P) = "#> [MAKE (BF :P) :W OP "TRUE] IF (FIRST :P) = "#< [OP (THING BF :P) = :W] OP OR (:P = "?) (:W = :P) END TO PRETTY :LIST LABEL "PL IF EMPTYP :LIST [STOP] TYPE "# PR FIRST :LIST MAKE "LIST (BF :LIST) GO "PL END TO SUB.WORD :WORD IF (FIRST :WORD) = "#< [OP THING BF :WORD] IF :WORD = "#*#* [OP FIRST :PAD] OP :WORD END TO SUB.ITEM :ITEM IF EMPTYP :ITEM [OP []] IF WORDP :ITEM [OP SUB.WORD :ITEM] OP FPUT (SUB.ITEM FIRST :ITEM) SUB.ITEM BF :ITEM END TO EXEC.INST :OP :ITEM IF :OP = "SHOVE [SHOVE :ITEM STOP] IF :OP = "MARK [MARK :ITEM STOP] IF :OP = "NOTICE [NOTICE :ITEM STOP] IF :OP = "SEND [NL PR :ITEM NL STOP] IF :OP = "RECEIVE [NL (TYPE :ITEM "# ) SHOVE RL NL STOP] RUN :ITEM END TO EXEC.ACTION :ACTION EXEC.INST FIRST :ACTION SUB.ITEM FIRST BF :ACTION END TO DELETE :ITEM :LIST LOCAL "NEW MAKE "NEW [] LABEL "DL IF EMPTYP :LIST [OP :NEW] IF :ITEM = FIRST :LIST [OP (SE :NEW BF :LIST)] MAKE "NEW LPUT (FIRST :LIST) :NEW MAKE "LIST BF :LIST GO "DL END TO MIGRATE :ITEM MAKE "PAD DELETE :ITEM :PAD MAKE "PAD FPUT :ITEM :PAD END TO ACTION :LIST MAKE "ACTION LPUT :LIST :ACTION END TO END.OF.RULE MAKE "RULE.BASE LPUT (FPUT :NAME LIST :PRED :ACTION) :RULE.BASE END TO PRED :LIST MAKE "PRED LPUT :LIST :PRED END TO MAIN.LOOP LABEL "ML IF EXEC.RULES :RULE.BASE [STOP] GO "ML END TO MATCH.ITEM :P :S IF EMPTYP :P [OP "TRUE] IF EMPTYP :S [OP "FALSE] IF WORDP :P [OP SYMBOL :P :S] IF AND LISTP :P LISTP :S [OP AND (MATCH.ITEM (FIRST :P) (FIRST :S)) (MATCH.ITEM (BF :P) (BF :S))] END TO CONSULT TYPE [Goal:# ] MAKE "PAD FPUT RL [] MAIN.LOOP END -- paul j. drongowski siemens corporate research inc pjd@demon.siemens.com princeton, new jersey 08540 (617) 734-6547