home *** CD-ROM | disk | FTP | other *** search
- ;;;; This file contains sample data for demonstrating a simple
- ;;;; transition-tree language-understanding system.
-
- ;;; This section contains the top-level interface procedure and
- ;;; the reply procedures.
-
- (DEFUN INTERFACE ()
- (PRINT '>)
- (DO ((INPUT (READ) (READ)))
- ((NULL INPUT) 'DONE)
- (LET ((ANSWER (QUESTION INPUT)))
- (COND ((OR (NOT ANSWER) ;Goof, parse failed.
- (SECOND ANSWER)) ;Goof, words remain at end.
- (FORMAT T "~%Sorry, I can't parse that."))))
- (PRINT '>)))
-
- (DEFUN REPORT-IDENTITY (OBJECTS)
- (COND ((NULL OBJECTS) (FORMAT "~%There are none."))
- ((NULL (CDR OBJECTS))
- (FORMAT T "~%There is just ~A." OBJECTS))
- (T (FORMAT T "~%They Are ~A." OBJECTS))))
-
- (DEFUN REPORT-NUMBER (OBJECTS)
- (COND ((NULL OBJECTS) (FORMAT T "~%There are none."))
- ((NULL (CDR OBJECTS)) (FORMAT T "~%There is only 1."))
- (T (FORMAT T "~%There are ~A." (LENGTH OBJECTS)))))
-
- (DEFUN REPORT-ATTRIBUTES (ATTRIBUTES TOOLS)
- (MAPCAR #'(LAMBDA (TOOL)
- (MAPCAR '(LAMBDA (ATTRIBUTE)
- (IF (GET TOOL ATTRIBUTE)
- (FORMAT T "~%~A's ~A is ~A."
- TOOL ATTRIBUTE (GET TOOL ATTRIBUTE))
- (FORMAT T "~%~A's ~A is unknown."
- TOOL ATTRIBUTE)))
- ATTRIBUTES))
- TOOLS))
-
- (DEFUN REPORT-DISTANCE (X Y)
- (COND ((NULL X) (FORMAT T "~%Sorry, I couldn't find the first tool."))
- ((NULL Y) (FORMAT T "~%Sorry, I couldn't find the second tool."))
- (T (FORMAT T "~%The distance is the square root of ~A."
- (+ (SQUARE (- (GET X 'X-COORDINATE)
- (GET Y 'X-COORDINATE)))
- (SQUARE (- (GET X 'Y-COORDINATE)
- (GET Y 'Y-COORDINATE)))
- (SQUARE (- (GET X 'Z-COORDINATE)
- (GET Y 'Z-COORDINATE))))))))
-
- (DEFUN SQUARE (X) (* X X))
-
- (DEFUN MAKE-SEARCH-PROCEDURE (PROPERTIES TOOL)
- `(LET ((CANDIDATES (GET ',(OR (GET TOOL 'SINGULAR-FORM) TOOL)
- 'INSTANCE)))
- ,@(MAPCAR #'(LAMBDA (FILTER)
- `(SETQ CANDIDATES (REMOVE-IF-NOT ',FILTER CANDIDATES)))
- (MAPCAR #'(LAMBDA (PROPERTY) (GET PROPERTY 'TEST-PROCEDURE))
- PROPERTIES))
- CANDIDATES))
-
- ;;; This section contains the grammar's transition trees.
-
- (RECORD QUESTION
- ((BRANCH ((PARSE PRESENT)
- (BRANCH (THE (PARSE ATTRIBUTES) OF (PARSE TOOLS)
- (PARSE-RESULT-IF-END
- (REPORT-ATTRIBUTES ATTRIBUTES TOOLS)))
- ((PARSE TOOLS) S (PARSE ATTRIBUTES)
- (PARSE-RESULT-IF-END
- (REPORT-ATTRIBUTES ATTRIBUTES TOOLS)))))
- (HOW MANY METERS IS (PARSE TOOL1) FROM (PARSE TOOL2)
- (PARSE-RESULT-IF-END
- (REPORT-DISTANCE TOOL1 TOOL2)))
- (IDENTIFY (PARSE TOOLS)
- (PARSE-RESULT-IF-END
- (REPORT-IDENTITY TOOLS)))
- (COUNT (PARSE TOOLS)
- (PARSE-RESULT-IF-END
- (REPORT-NUMBER TOOLS))))))
-
- (RECORD PRESENT
- ((BRANCH (SHOW ME (PARSE-RESULT 'PRINT))
- (WHAT IS (PARSE-RESULT 'PRINT))
- (WHAT ARE (PARSE-RESULT 'PRINT))
- (GIVE (PARSE-RESULT 'PRINT))
- (DISPLAY (PARSE-RESULT 'PRINT))
- (PRINT (PARSE-RESULT 'PRINT))
- (PRESENT (PARSE-RESULT 'PRINT)))))
-
- (RECORD A-OR-THE
- ((BRANCH (A (PARSE-RESULT 'INDEFINITE))
- (THE (PARSE-RESULT 'DEFINITE)))))
-
- (RECORD ATTRIBUTES
- ((BRANCH ((PARSE ATTRIBUTE)
- (PARSE ATTRIBUTES)
- (PARSE-RESULT (CONS ATTRIBUTE ATTRIBUTES)))
- (AND (PARSE ATTRIBUTE)
- (PARSE-RESULT (LIST ATTRIBUTE)))
- ((PARSE ATTRIBUTE)
- (PARSE-RESULT (LIST ATTRIBUTE))))))
-
- (RECORD ATTRIBUTE
- ((BRANCH (WIDTH (PARSE-RESULT 'WIDTH))
- (BREADTH (PARSE-RESULT 'WIDTH))
- (DEPTH (PARSE-RESULT 'DEPTH))
- (HEIGHT (PARSE-RESULT 'HEIGHT))
- (LENGTH (PARSE-RESULT 'LENGTH))
- (WEIGHT (PARSE-RESULT 'WEIGHT))
- (SIZE (PARSE-RESULT 'SIZE))
- (COLOR (PARSE-RESULT 'COLOR)))))
-
- (RECORD PROPERTIES
- ((BRANCH ((PARSE PROPERTY)
- (PARSE PROPERTIES)
- (PARSE-RESULT (CONS PROPERTY PROPERTIES)))
- (AND (PARSE PROPERTY)
- (PARSE-RESULT (LIST PROPERTY)))
- ((PARSE PROPERTY)
- (PARSE-RESULT (LIST PROPERTY))))))
-
- (RECORD PROPERTY
- ((BRANCH (LARGE (PARSE-RESULT 'LARGE))
- (MEDIUM (PARSE-RESULT 'MEDIUM))
- (SMALL (PARSE-RESULT 'SMALL))
-
- (BLACK (PARSE-RESULT 'BLACK))
- (BLUE (PARSE-RESULT 'BLUE))
- (RED (PARSE-RESULT 'RED))
- (YELLOW (PARSE-RESULT 'YELLOW))
-
- (LONG (PARSE-RESULT 'LONG))
- (SHORT (PARSE-RESULT 'SHORT)))))
-
- (RECORD TOOLS
- ((BRANCH
- ((PARSE A-OR-THE)
- (PARSE TOOL-TYPE)
- (PARSE-RESULT
- (EVAL (MAKE-SEARCH-PROCEDURE NIL TOOL-TYPE))))
- ((PARSE A-OR-THE)
- (PARSE PROPERTIES)
- (PARSE TOOL-TYPE)
- (PARSE-RESULT
- (EVAL (MAKE-SEARCH-PROCEDURE PROPERTIES TOOL-TYPE)))))))
-
- (RECORD TOOL-TYPE
- ((BRANCH (HAMMERS (PARSE-RESULT 'HAMMERS))
- (SCREWDRIVERS (PARSE-RESULT 'SCREWDRIVERS))
- (SAWS (PARSE-RESULT 'SAWS))
- (WRENCHES (PARSE-RESULT 'WRENCHES))
- (HAMMER (PARSE-RESULT 'HAMMER))
- (SCREWDRIVER (PARSE-RESULT 'SCREWDRIVER))
- (SAW (PARSE-RESULT 'SAW))
- (WRENCH (PARSE-RESULT 'WRENCH)))))
-
- (RECORD TOOL1 ((PARSE TOOLS) (PARSE-RESULT (FIRST TOOLS))))
-
- (RECORD TOOL2 ((PARSE TOOLS) (PARSE-RESULT (FIRST TOOLS))))
-
- ;;; This section contains definitions for common property
- ;;; predicates.
-
- (DEFUN LARGEP (OBJECT) (EQUAL (GET OBJECT 'SIZE) 'LARGE))
- (DEFUN MEDIUMP (OBJECT) (EQUAL (GET OBJECT 'SIZE) 'MEDIUM))
- (DEFUN SMALLP (OBJECT) (EQUAL (GET OBJECT 'SIZE) 'SMALL))
-
- (DEFUN BLACKP (OBJECT) (EQUAL (GET OBJECT 'COLOR) 'BLACK))
- (DEFUN BLUEP (OBJECT) (EQUAL (GET OBJECT 'COLOR) 'BLUE))
- (DEFUN REDP (OBJECT) (EQUAL (GET OBJECT 'COLOR) 'RED))
- (DEFUN YELLOWP (OBJECT) (EQUAL (GET OBJECT 'COLOR) 'YELLOW))
-
- (DEFUN LONGP (OBJECT) (EQUAL (GET OBJECT 'SIZE) 'LONG))
- (DEFUN SHORTP (OBJECT) (EQUAL (GET OBJECT 'SIZE) 'SHORT))
-
- ;;; This section contains forms that attach property predicates
- ;;; to property names.
-
- (SETF (GET 'LARGE 'TEST-PROCEDURE) 'LARGEP)
- (SETF (GET 'MEDIUM 'TEST-PROCEDURE) 'MEDIUMP)
- (SETF (GET 'SMALL 'TEST-PROCEDURE) 'SMALLP)
-
- (SETF (GET 'LONG 'TEST-PROCEDURE) 'LONGP)
- (SETF (GET 'SHORT 'TEST-PROCEDURE) 'SHORTP)
-
- (SETF (GET 'BLACK 'TEST-PROCEDURE) 'BLACKP)
- (SETF (GET 'BLUE 'TEST-PROCEDURE) 'BLUEP)
- (SETF (GET 'RED 'TEST-PROCEDURE) 'REDP)
- (SETF (GET 'YELLOW 'TEST-PROCEDURE) 'YELLOWP)
-
- ;;; This section attaches grammatical properties to the tool
- ;;; names.
-
- (SETF (GET 'HAMMERS 'SINGULAR-FORM) 'HAMMER)
- (SETF (GET 'SCREWDRIVERS 'SINGULAR-FORM) 'SCREWDRIVER)
- (SETF (GET 'SAWS 'SINGULAR-FORM) 'SAW)
- (SETF (GET 'WRENCHES 'SINGULAR-FORM) 'WRENCH)
-
- ;;; This section creates the tools.
-
- (SETF (GET 'TOOL 'INSTANCE) '(HAMMER SCREWDRIVER SAW WRENCH))
- (SETF (GET 'HAMMER 'INSTANCE) '(HAMMER8))
- (SETF (GET 'SCREWDRIVER'INSTANCE) '(S1 S2 S3 S4 S5))
- (SETF (GET 'SAW 'INSTANCE) '(SAW3))
- (SETF (GET 'WRENCH 'INSTANCE) '(WRENCH1 WRENCH2))
-
- (DEFUN MAKE-TOOL (TOOL &OPTIONAL COLOR SIZE LENGTH WEIGHT (X 0) (Y 0) (Z 0))
- (SETF (GET TOOL 'COLOR) COLOR)
- (SETF (GET TOOL 'SIZE) SIZE)
- (SETF (GET TOOL 'LENGTH) LENGTH)
- (SETF (GET TOOL 'WEIGHT) WEIGHT)
- (SETF (GET TOOL 'X-COORDINATE) X)
- (SETF (GET TOOL 'Y-COORDINATE) Y)
- (SETF (GET TOOL 'Z-COORDINATE) Z))
-
- (MAKE-TOOL 'SAW3 'RED 'MEDIUM 4 5 0 0 0)
- (MAKE-TOOL 'HAMMER8 'BLUE 'MEDIUM 1 8 8 4 3)
- (MAKE-TOOL 'WRENCH1 'RED 'SMALL 8 2 8 1 8)
- (MAKE-TOOL 'WRENCH2 'RED 'LARGE 2 8 1 7 2)
- (MAKE-TOOL 'S1 'BLUE 'LARGE 8 1 7 2 8)
- (MAKE-TOOL 'S2 'RED 'LARGE 5 8 3 9 0)
- (MAKE-TOOL 'S3 'RED 'SMALL 7 9 7 3 2)
- (MAKE-TOOL 'S4 'YELLOW 'SMALL 2 8 1 3 3)
- (MAKE-TOOL 'S5 'BLACK 'MEDIUM 3 3 3 3 3)
-
- ;;; This section contains some sample sentences.
-
- (SETF A '(IDENTIFY THE LARGE SCREWDRIVERS)
- B '(COUNT THE LARGE RED SCREWDRIVERS)
- C '(SHOW ME THE HEIGHT LENGTH AND COLOR OF THE SAW)
- D '(PRINT THE SAW S WEIGHT)
- E '(HOW MANY METERS IS THE SAW FROM THE HAMMER)
- F '(HOW MANY METERS IS THE YELLOW SAW FROM THE BLACK HAMMER)
- G '(SHOW ME THE LENGTH OF THE BLUE SCREWDRIVERS))
-
- ;;; This section contains a Common LISP primitive that is not yet
- ;;; in GC LISP.
-
- (DEFUN REMOVE-IF-NOT (P L)
- (MAPCAN #'(LAMBDA (E) (IF (FUNCALL P E) (LIST E) NIL)) L))
-