(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))))))