home *** CD-ROM | disk | FTP | other *** search
- ;;;; This file contains sample data and procedures for
- ;;;; demonstrating matching programs.
-
- ;;; This section contains an algebra problem.
-
- (SETF D
- '(THE NUMBER OF CUSTOMERS TOM GETS
- IS
- THE SUM OF TWICE THE SQUARE OF THE NUMBER OF ADS HE RUNS
- AND THE COST OF THE ADD))
-
- ;;; This section contains an algebra translation program which
- ;;; uses MATCH. It is patterned after STUDENT, an early
- ;;; Artificial Intelligence program.
-
- (DEFUN TRANSLATE (E)
- (LET (A-LIST NIL)
- (COND ((SETQ A-LIST (MATCH '((+ L) IS (+ R)) E NIL))
- `(= ,(TRANSLATE (MATCH-VALUE 'L A-LIST))
- ,(TRANSLATE (MATCH-VALUE 'R A-LIST))))
- ((SETQ A-LIST (MATCH '(THE DIFFERENCE BETWEEN (+ L)
- AND (+ R)) E NIL))
- `(- ,(TRANSLATE (MATCH-VALUE 'L A-LIST))
- ,(TRANSLATE (MATCH-VALUE 'R A-LIST))))
- ((SETQ A-LIST (MATCH '(THE SUM OF (+ L) AND (+ R)) E NIL))
- `(+ ,(TRANSLATE (MATCH-VALUE 'L A-LIST))
- ,(TRANSLATE (MATCH-VALUE 'R A-LIST))))
- ((SETQ A-LIST (MATCH '((+ L) TIMES (+ R)) E NIL))
- `(* ,(TRANSLATE (MATCH-VALUE 'L A-LIST))
- ,(TRANSLATE (MATCH-VALUE 'R A-LIST))))
- ((SETQ A-LIST (MATCH '(TWICE (+ R)) E NIL))
- `(* 2 ,(TRANSLATE (MATCH-VALUE 'R A-LIST))))
- ((SETQ A-LIST (MATCH '(THE SQUARE OF (+ R)) E NIL))
- `(EXPT ,(TRANSLATE (MATCH-VALUE 'R A-LIST)) 2))
- ((SETQ A-LIST (MATCH '((+ L) SQUARED) E NIL))
- `(EXPT ,(TRANSLATE (MATCH-VALUE 'L A-LIST)) 2))
- ((SETQ A-LIST (MATCH '((RESTRICT (> V) NUMBERP)) E NIL))
- (MATCH-VALUE 'V A-LIST))
- (T E))))
-
- ;;; This section contains a pseudo-psychiatrist program. It is
- ;;; patterned after DOCTOR, another early Artificial Intelligence
- ;;; program, also known as ELIZA.
-
- (DEFUN DOCTOR ()
- (PRINT '(SPEAK UP!))
- (TERPRI)
- (DO ((S (READ) (READ)) (A-LIST NIL NIL) (MOTHER))
- (NIL)
- (COND ((SETQ A-LIST (MATCH '(I AM WORRIED (+ L)) S NIL))
- (PRINT `(HOW LONG HAVE YOU BEEN WORRIED
- ,@(MATCH-VALUE 'L A-LIST))))
- ((MATCH '(+ MOTHER +) S NIL)
- (SETQ MOTHER T)
- (PRINT '(TELL ME MORE ABOUT YOUR FAMILY)))
- ((MATCH '(+ COMPUTERS +) S NIL)
- (PRINT '(DO MACHINES FRIGHTEN YOU)))
- ((OR (MATCH '(NO) S NIL)
- (MATCH '(YES) S NIL))
- (PRINT '(PLEASE DO NOT BE SO SHORT WITH ME)))
- ((MATCH '(+ (RESTRICT ? BAD-WORD-P) +) S NIL)
- (PRINT '(PLEASE DO NOT USE WORDS LIKE THAT)))
- (MOTHER (SETQ MOTHER NIL)
- (PRINT '(EARLIER YOU SPOKE OF YOUR MOTHER)))
- (T (PRINT '(I AM SORRY OUR TIME IS UP))
- (RETURN 'GOODBYE)))
- (TERPRI)))
-