(progn (setq OBJECTS (make-hash-table :size 20)) ;; DEFINE A HASH TABLE IN WHICH THE BLOCKS LOCATION WILL BE STORED BLOCKS DATA BASE (defvar total-records ) (defun OBJECTS-initialization () ;; DEFINE THE FUNCTION WHICH WILL BUILD BLOCKS IN THE LYBRANTH (INTIALIZE THE BLOCKS DATA BASE) (setf c 0) (PRINT "PLEASE ENTER HOW MANY OBJECT ARE YOU GOING TO HAVE IN YOUR DATABASE") (SETF total-records (READ)) (loop (WHEN (= C total-records) (PROGN (PRINT "THE END OF THE INITIALIZATION")(RETURN))) (PRINT " NEW RECORD NAME COLOR SIZE location") (setf c (incf c)) ( setf (gethash c OBJECTS) (list (READ) (READ) (READ) (read))) ) ) (defun ask-question () (defvar question) (defvar question-type) (setf question (list 0)) (loop (setq a (read)) (when (EQUAL a '?) (return)) (setf question (append question (list A))) ) (setf question (cdr question)) (setf question-type (car question)) (setf question (nreverse question)) (answer question-type) ) (defun building-level () (setf k 1) (SETf level (LIST 0)) (setf top-level (list 0)) (setq w (car question)) (loop (setf z (gethash k OBJECTS)) (COND ((equal w (cAR Z)) (setf level (append level (LIST (CDR Z)))))) (when (= k total-records) (return nil)) (setf k (incf k)) ) (setq level (CDR level)) (print level) (setf question (cdr question)) (setf top-level level) ) (defun where () (defvar q) (defvar l) (progn (loop (cond ( (not (atom (car level))) (progn (setq l (car (car level))) (print " the first word l ") (print l) (when (or (equal (car question) 'where) (equal level 'nil)) (progn (print "answer is ") (print level) (return))) (cond ((equal (car question) l ) (progn (print " we found the word ")(setq level (car level)) (print level) (setq question (cdr question)) (setq level (cdr level)) (print level)(setq q (car question)) (print q))) ((not (equal (car question) l)) (setq level (cdr level)))) )) ( (atom (car level)) (progn (setq l (car level)) (print " the first atom word l ") (print l) (when (or (equal (car question) 'where) (equal level 'nil)) (progn (print "answer is ") (print level) (return))) (cond ((equal (car question) l ) (progn (print " we found the word ") (print level) (setq question (cdr question)) (setq level (cdr level)) (print level)(setq q (car question)) (print q))) ((not (equal (car question) l)) (setq level (cdr level)))) )) ) )) ) (defun answer (question-type) (building-level) (cond ((equal question-type 'where) (where)) ((equal question-type 'what ) (what)) ) ) (defun what () (defvar q) (defvar l) (progn (loop (cond ( (not (atom (car level))) (progn (setq l (car (car level))) (print " the first word l ") (print l) (when (or (equal (car question) 'size) (equal level 'nil)) (progn (print "answer is ") (print (car level)) (return))) (cond ((equal (car question) l ) (progn (print " we found the word ")(setq level (car level)) (print level) (setq question (cdr question)) (setq level (cdr level)) (print level)(setq q (car question)) (print q))) ((not (equal (car question) l)) (setq level (cdr level)))) )) ( (atom (car level)) (progn (setq l (car level)) (print " the first atom word l ") (print l) (when (or (equal (car question) 'size) (equal level 'nil)) (progn (print "answer is ") (print (car level)) (return))) (cond ((equal (car question) l ) (progn (print " we found the word ") (print level) (setq question (cdr question)) (setq level (cdr level)) (print level)(setq q (car question)) (print q))) ((not (equal (car question) l)) (setq level (cdr level)))) )) ) )) ) )