pjd@demon.siemens.com (dr. funk) (03/01/91)
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-6547pjd@demon.siemens.com (dr. funk) (03/01/91)
TO INIT.ROBBIE MAKE "RULE.BASE [] P1 P2 P3 P4 P5 P6 P7 RECYCLE (PR NODES [free nodes.]) END TO P1 RULE "P1 PRED [PUT.ON #>OBJECT #>SUPPORT] ACTION [MARK #*#*] ACTION [SHOVE [PUT.AT #<OBJECT [SPACE ON #<SUPPORT]]] END.OF.RULE END TO P2 RULE "P2 PRED [PUT.AT #>OBJECT #>NEWPLACE] ACTION [MARK #*#*] ACTION [SHOVE [TARGET #<OBJECT #<NEWPLACE]] ACTION [SHOVE [GRASP #<OBJECT]] END.OF.RULE END TO P3 RULE "P3 PRED [MOVE #>OBJECT] PRED [#>SUPPORT SUPPORTS #<OBJECT] ACTION [MARK [#<SUPPORT SUPPORTS #<OBJECT]] END.OF.RULE END TO P4 RULE "P4 PRED [MOVE #>OBJECT] ACTION [MARK #*#*] ACTION [NOTICE [TARGET #<OBJECT #>NEWPLACE]] ACTION [SEND [Move.hand #<NEWPLACE]] ACTION [SEND [Ungrasp]] END.OF.RULE END TO P5 RULE "P5 PRED [GRASP #>OBJECT] PRED [#<OBJECT SUPPORTS NOTHING] ACTION [MARK #*#*] ACTION [SHOVE [MOVE #<OBJECT]] ACTION [SEND [Move.hand [TOP OF #<OBJECT]]] ACTION [SEND [Grasp #<OBJECT]] END.OF.RULE END TO P6 RULE "P6 PRED [GRASP #>OBJECT] PRED [#<OBJECT SUPPORTS #>OBSTRUCTION] ACTION [SHOVE [PUT.ON #<OBSTRUCTION FLOOR]] END.OF.RULE END TO P7 RULE "P7 PRED [GRASP #>OBJECT] ACTION [RECEIVE [What is on #<OBJECT]] ACTION [NOTICE [GRASP #<OBJECT]] END.OF.RULE END -- paul j. drongowski siemens corporate research inc pjd@demon.siemens.com princeton, new jersey 08540 (617) 734-6547
pjd@demon.siemens.com (dr. funk) (03/01/91)
?INIT.ROBBIE 1821 free nodes. ?GO Executing rule P2 Pad after execution. GRASP TABLE TARGET TABLE XYZ Marked [PUT.AT TABLE XYZ] Executing rule P7 What is on TABLE TABLE SUPPORTS LAMP Pad after execution. GRASP TABLE TABLE SUPPORTS LAMP TARGET TABLE XYZ Marked [PUT.AT TABLE XYZ] Executing rule P6 Pad after execution. PUT.ON LAMP FLOOR GRASP TABLE TABLE SUPPORTS LAMP TARGET TABLE XYZ Marked [PUT.AT TABLE XYZ] Executing rule P1 Pad after execution. PUT.AT LAMP [SPACE ON FLOOR] Marked [PUT.ON LAMP FLOOR] GRASP TABLE TABLE SUPPORTS LAMP TARGET TABLE XYZ Marked [PUT.AT TABLE XYZ] Executing rule P2 Pad after execution. GRASP LAMP TARGET LAMP [SPACE ON FLOOR] Marked [PUT.AT LAMP [SPACE ON FLOOR]] Marked [PUT.ON LAMP FLOOR] GRASP TABLE TABLE SUPPORTS LAMP TARGET TABLE XYZ Marked [PUT.AT TABLE XYZ] Executing rule P7 What is on LAMP LAMP SUPPORTS NOTHING Pad after execution. GRASP LAMP LAMP SUPPORTS NOTHING TARGET LAMP [SPACE ON FLOOR] Marked [PUT.AT LAMP [SPACE ON FLOOR]] Marked [PUT.ON LAMP FLOOR] GRASP TABLE TABLE SUPPORTS LAMP TARGET TABLE XYZ Marked [PUT.AT TABLE XYZ] Executing rule P5 Move.hand [TOP OF LAMP] Grasp LAMP Pad after execution. MOVE LAMP Marked [GRASP LAMP] LAMP SUPPORTS NOTHING TARGET LAMP [SPACE ON FLOOR] Marked [PUT.AT LAMP [SPACE ON FLOOR]] Marked [PUT.ON LAMP FLOOR] GRASP TABLE TABLE SUPPORTS LAMP TARGET TABLE XYZ Marked [PUT.AT TABLE XYZ] Executing rule P3 Pad after execution. Marked [TABLE SUPPORTS LAMP] MOVE LAMP Marked [GRASP LAMP] LAMP SUPPORTS NOTHING TARGET LAMP [SPACE ON FLOOR] Marked [PUT.AT LAMP [SPACE ON FLOOR]] Marked [PUT.ON LAMP FLOOR] GRASP TABLE TARGET TABLE XYZ Marked [PUT.AT TABLE XYZ] Executing rule P4 Move.hand [SPACE ON FLOOR] Ungrasp Pad after execution. TARGET LAMP [SPACE ON FLOOR] Marked [MOVE LAMP] Marked [TABLE SUPPORTS LAMP] Marked [GRASP LAMP] LAMP SUPPORTS NOTHING Marked [PUT.AT LAMP [SPACE ON FLOOR]] Marked [PUT.ON LAMP FLOOR] GRASP TABLE TARGET TABLE XYZ Marked [PUT.AT TABLE XYZ] Executing rule P7 What is on TABLE TABLE SUPPORTS NOTHING Pad after execution. GRASP TABLE TABLE SUPPORTS NOTHING TARGET LAMP [SPACE ON FLOOR] Marked [MOVE LAMP] Marked [TABLE SUPPORTS LAMP] Marked [GRASP LAMP] LAMP SUPPORTS NOTHING Marked [PUT.AT LAMP [SPACE ON FLOOR]] Marked [PUT.ON LAMP FLOOR] TARGET TABLE XYZ Marked [PUT.AT TABLE XYZ] Executing rule P5 Move.hand [TOP OF TABLE] Grasp TABLE Pad after execution. MOVE TABLE Marked [GRASP TABLE] TABLE SUPPORTS NOTHING TARGET LAMP [SPACE ON FLOOR] Marked [MOVE LAMP] Marked [TABLE SUPPORTS LAMP] Marked [GRASP LAMP] LAMP SUPPORTS NOTHING Marked [PUT.AT LAMP [SPACE ON FLOOR]] Marked [PUT.ON LAMP FLOOR] TARGET TABLE XYZ Marked [PUT.AT TABLE XYZ] Executing rule P4 Move.hand XYZ Ungrasp Pad after execution. TARGET TABLE XYZ Marked [MOVE TABLE] Marked [GRASP TABLE] TABLE SUPPORTS NOTHING TARGET LAMP [SPACE ON FLOOR] Marked [MOVE LAMP] Marked [TABLE SUPPORTS LAMP] Marked [GRASP LAMP] LAMP SUPPORTS NOTHING Marked [PUT.AT LAMP [SPACE ON FLOOR]] Marked [PUT.ON LAMP FLOOR] Marked [PUT.AT TABLE XYZ] ?RECYCLE PR NODES 1736 ?SETWRITE [] -- paul j. drongowski siemens corporate research inc pjd@demon.siemens.com princeton, new jersey 08540 (617) 734-6547