(defun bad-range (number-list) (remove-if-not #'(lambda (number) (and (< number 5) (> number 1))) number-list)) (defun count-the (word-list) (length (remove-if-not #'(lambda (word) (equal word 'the)) word-list))) (setf database '((b1 shape brick) (b1 color green) (b1 size small) (b1 supported-by b2) (b1 supported-by b3) (b2 shape brick) (b2 color red) (b2 size small) (b2 supports b1) (b2 left-of b3) (b3 shape brick) (b3 color red) (b3 size small) (b3 supports b1) (b3 right-of b2) (b4 shape pyramid) (b4 color blue) (b4 size large) (b4 supported-by b5) (b5 shape cube) (b5 color green) (b5 size large) (b5 supports b4) (b6 shape brick) (b6 color purple) (b6 size large))) (defun match-element (x y) (or (equal y '?) (equal x y))) (defun match-triple (x y) (every #'match-element x y)) (defun fetch (x) (remove-if-not #'(lambda (y) (match-triple y x)) database)) (defun color-ask (x) (list x 'color '?)) (defun supporters (x) (mapcar #'first (fetch (list '? 'supports x))))