previous | index | next

A Procedure to Process Queries: answer-by-pattern

     (define query-loop
       (lambda ()
         (newline)
         (newline)
         (let ((query (read)))
           (cond ((exit? query)
                  (display '(see you later)))
                 (else (answer-by-pattern query movie-p/a-list)
                       (query-loop))))))

     (define answer-by-pattern
       (lambda (query p/a-list)
         (cond ((null? p/a-list) 
                (display '(i do not understand))  ; no match - query not understood
               ((matches? (pattern (car p/a-list)) query)
                  ;; match found - use pattern and query to 
                  ;; determine argument and apply action...)
               (else 
                ; try next pattern
                (answer-by-pattern query (cdr p/a-list))))))

previous | index | next