- ; Validating an expression in your DSL 
- ; ------------------------------ 
- ; The Little Lisper 3rd Edition 
- ; Chapter 7 
- ; Exercise 2 
- ; 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 aexp4 5) 
- ; ------------------------------ 
-   
- ; need to def aexp1 and aexp2 
-   
- (defun operator (aexp_) 
-   (car (cdr aexp_))) 
-   
- (print (operator '(1 + 2))) 
- ;+ 
-   
- (defun isoperator (a) 
-   (cond 
-    ((null a) NIL) 
-    ((eq a '+) t) 
-    ((eq a '*) t) 
-    ((eq a '^) t) 
-    (t NIL))) 
-   
- (print (isoperator '^)) 
- ;T 
-   
- (defun 1st-sub-expr (aexp_) 
-   (car aexp_)) 
-   
- (print (1st-sub-expr '(1 + 2))) 
- ;1 
-   
- (defun 2nd-sub-expr (aexp_) 
-   (car (cdr (cdr aexp_)))) 
-   
- (print (2nd-sub-expr '(1 + 2))) 
- ;2 
-   
- (defun number_ (n) 
-   (cond 
-    ((null n) t) 
-    (t (and 
-        (null (car n)) 
-        (number_ (cdr n)))))) 
-   
- (print (cons '()(cons '() '()))) 
- ;(NIL  NIL) 
- (print (number_ (cons '()(cons '() '())))) 
- ;T 
- ;(number_ (car '(1 + 2))) 
-   
- (defun sub1 (n) 
-   (- n 1)) 
-   
- (defun notatom (lat) 
-   (not (atom lat))) 
-   
- (defun number__ (n) 
-   (cond 
-    ((null n) nil) 
-    ((notatom n) nil) 
-   ((= 0 n) t) 
-    (t (number__ (sub1 n))))) 
-   
- (print (number__ 10)) 
- ;T 
-   
- (print (number__ '(66 6))) 
- ;NIL 
-   
-   
- (defun aexp? (aexp_) 
-   (cond 
-    ((null aexp_) NIL) 
-    ((number__ aexp_) t) 
-    ((isoperator (operator aexp_)) 
-     (aexp? (1st-sub-expr aexp_)) 
-     (aexp? (2nd-sub-expr aexp_)) 
-     ) 
-    (t NIL))) 
-   
- (print (aexp? aexp1)) 
- ;T 
-   
- (print (aexp? aexp2)) 
- ;T  
-   
- (print (aexp? l1)) 
- ;NIL (false) 
-   
- (print (aexp? l2)) 
- ;NIL (false) 
-