- ; Add binary operators to your expressions 
- ; ------------------------------ 
- ; The Little Lisper 3rd Edition 
- ; Chapter 7 
- ; Exercise 6 
- ; Common Lisp 
- ; http://t...content-available-to-author-only...r.com/thelittlelisper 
- ; http://t...content-available-to-author-only...t.com/2010/06/little-lisper-chapter-7-shadows.html 
- ; http://t...content-available-to-author-only...t.com/2010/06/little-lisper.html 
- ; ------------------------------ 
- (setf l1 '()) 
- (setf l2 '(3 + (66 6))) 
- (setf aexp1 '(1 + (3 * 4))) 
- (setf aexp2 '((3 ^ 4) + 5)) 
- (setf aexp3 '(3 * (4 * (5 * 6)))) 
- (setf aexp4 5) 
- ; ------------------------------ 
-   
- (setf lexp1 '(AND (OR x y) y)) 
- (setf lexp2 '(AND (NOT y)(OR u v))) 
- (setf lexp3 '(OR x y)) 
- (setf lexp4 'z) 
-   
- (defun 1st-sub-expr (aexp_) 
-   (car aexp_)) 
-   
- (defun 2nd-sub-expr (aexp_) 
-   (car (cdr (cdr aexp_)))) 
-   
- (defun loperator? (a) 
-   (cond 
-    ((null a) NIL) 
-    ((eq a 'OR) t) 
-    ((eq a 'AND) t) 
-    ((eq a 'NOT) t) 
-    (t NIL))) 
-   
- (print (loperator? 'AND)) 
- ;T 
- (print (loperator? 'bob)) 
- ;NIL (false) 
-   
- (defun lexp? (lexp_) 
-   (cond 
-    ((null lexp_) NIL)  
-    ((atom lexp_) t) 
-    ((loperator? (car lexp_)) 
-     (cond  
-      ((eq (car lexp_) 'NOT) 
-       (lexp? (1st-sub-expr lexp_))) 
-      (t  
-        (lexp? (1st-sub-expr lexp_)) 
-        (lexp? (2nd-sub-expr lexp_))))) 
-    (t NIL))) 
-   
- (print (lexp? lexp1)) 
- ;T 
-   
- (print (lexp? lexp2)) 
- ;T 
-   
- (print (lexp? lexp3)) 
- ;T 
-   
- (print (lexp? aexp1)) 
- ;NIL (false) 
-   
- (print (lexp? l2)) 
- ;NIL (false) 
-