[comp.edu] Logo ES

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-6547

pjd@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