- ; Expression evalutors - What is value of f at x? 
- ; ------------------------------ 
- ; The Little Lisper 3rd Edition 
- ; Chapter 8 
- ; Exercise 4 
- ; 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-8-friends-and.html 
- ; http://t...content-available-to-author-only...t.com/2010/06/little-lisper.html 
- ; ------------------------------ 
- (setf r1 '((a b)(a a)(b b))) 
- (setf r2 '((c c))) 
- (setf r3 '((a c)(b c))) 
- (setf r4 '((a b)(b a))) 
- (setf f1 '((a 1)(b 2)(c 2)(d 1))) 
- (setf f2 '()) 
- (setf f3 '((a 2)(b 1))) 
- (setf f4 '((1 $)(3 *))) 
- (setf d1 '(a b))  
- (setf d2 '(c d)) 
- (setf x 'a) 
- ; ------------------------------ 
-   
- (defun first_ (l) 
-   (cond 
-    ((null l) '()) 
-    (t (car l)))) 
-   
- (defun second_ (l) 
-   (cond 
-    ((null l) '()) 
-    (t (car (cdr l))))) 
-   
- (defun third_ (l) 
-   (cond 
-    ((null l) '()) 
-    (t (car (cdr (cdr l)))))) 
-   
- (defun pair? (lat) 
-   (cond 
-    ((null lat) NIL) 
-    ((atom lat) NIL) 
-    ((and (and (not (eq (first_ lat) NIL)) 
-               (not (eq (second_ lat) NIL)))) 
-     (eq (third_ lat) NIL)) 
-    (t NIL))) 
-   
- (defun rel? (rel) 
-   (cond 
-    ((null rel) t) 
-    ((atom rel) NIL) 
-    ((pair? (car rel)) 
-     (rel? (cdr rel))) 
-    (t NIL))) 
-   
- (defun fapply (f x) 
-   (cond 
-    ((null f) NIL) 
-    ((null x) NIL) 
-    ((and (rel? f) (atom x)) 
-     (cond 
-      ((eq (first (car f)) x) (second (car f))) 
-      (t (fapply (cdr f) x)))) 
-    (t NIL))) 
-   
- (print (fapply '((a 1)(b 2)) 'b)) 
- ;2 
-   
- (print (fapply f1 'x)) 
- ;book incorrect - presume they mean 'a - merely a typo 
- ;NIL no  answer 
-   
- (print (fapply f2 'x)) 
- ;NIL no  answer 
-   
- (print (fapply f3 'x)) 
- ;NIL no  answer 
-   
- (print (fapply f1 'a)) 
- ;1 
-   
- (print (fapply f2 'a)) 
- ;NIL no answer 
-   
- (print (fapply f3 'a)) 
- ;2 
-   
				OyBFeHByZXNzaW9uIGV2YWx1dG9ycyAtIFdoYXQgaXMgdmFsdWUgb2YgZiBhdCB4Pwo7IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQo7IFRoZSBMaXR0bGUgTGlzcGVyIDNyZCBFZGl0aW9uCjsgQ2hhcHRlciA4CjsgRXhlcmNpc2UgNAo7IENvbW1vbiBMaXNwCjsgaHR0cDovL3QuLi5jb250ZW50LWF2YWlsYWJsZS10by1hdXRob3Itb25seS4uLnIuY29tL3RoZWxpdHRsZWxpc3Blcgo7IGh0dHA6Ly90Li4uY29udGVudC1hdmFpbGFibGUtdG8tYXV0aG9yLW9ubHkuLi50LmNvbS8yMDEwLzA2L2xpdHRsZS1saXNwZXItY2hhcHRlci04LWZyaWVuZHMtYW5kLmh0bWwKOyBodHRwOi8vdC4uLmNvbnRlbnQtYXZhaWxhYmxlLXRvLWF1dGhvci1vbmx5Li4udC5jb20vMjAxMC8wNi9saXR0bGUtbGlzcGVyLmh0bWwKOyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKHNldGYgcjEgJygoYSBiKShhIGEpKGIgYikpKQooc2V0ZiByMiAnKChjIGMpKSkKKHNldGYgcjMgJygoYSBjKShiIGMpKSkKKHNldGYgcjQgJygoYSBiKShiIGEpKSkKKHNldGYgZjEgJygoYSAxKShiIDIpKGMgMikoZCAxKSkpCihzZXRmIGYyICcoKSkKKHNldGYgZjMgJygoYSAyKShiIDEpKSkKKHNldGYgZjQgJygoMSAkKSgzICopKSkKKHNldGYgZDEgJyhhIGIpKSAKKHNldGYgZDIgJyhjIGQpKQooc2V0ZiB4ICdhKQo7IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKKGRlZnVuIGZpcnN0XyAobCkKICAoY29uZAogICAoKG51bGwgbCkgJygpKQogICAodCAoY2FyIGwpKSkpCgooZGVmdW4gc2Vjb25kXyAobCkKICAoY29uZAogICAoKG51bGwgbCkgJygpKQogICAodCAoY2FyIChjZHIgbCkpKSkpCgooZGVmdW4gdGhpcmRfIChsKQogIChjb25kCiAgICgobnVsbCBsKSAnKCkpCiAgICh0IChjYXIgKGNkciAoY2RyIGwpKSkpKSkKCihkZWZ1biBwYWlyPyAobGF0KQogIChjb25kCiAgICgobnVsbCBsYXQpIE5JTCkKICAgKChhdG9tIGxhdCkgTklMKQogICAoKGFuZCAoYW5kIChub3QgKGVxIChmaXJzdF8gbGF0KSBOSUwpKQogICAgICAgICAgICAgIChub3QgKGVxIChzZWNvbmRfIGxhdCkgTklMKSkpKQogICAgKGVxICh0aGlyZF8gbGF0KSBOSUwpKQogICAodCBOSUwpKSkKCihkZWZ1biByZWw/IChyZWwpCiAgKGNvbmQKICAgKChudWxsIHJlbCkgdCkKICAgKChhdG9tIHJlbCkgTklMKQogICAoKHBhaXI/IChjYXIgcmVsKSkKICAgIChyZWw/IChjZHIgcmVsKSkpCiAgICh0IE5JTCkpKQoKKGRlZnVuIGZhcHBseSAoZiB4KQogIChjb25kCiAgICgobnVsbCBmKSBOSUwpCiAgICgobnVsbCB4KSBOSUwpCiAgICgoYW5kIChyZWw/IGYpIChhdG9tIHgpKQogICAgKGNvbmQKICAgICAoKGVxIChmaXJzdCAoY2FyIGYpKSB4KSAoc2Vjb25kIChjYXIgZikpKQogICAgICh0IChmYXBwbHkgKGNkciBmKSB4KSkpKQogICAodCBOSUwpKSkKCihwcmludCAoZmFwcGx5ICcoKGEgMSkoYiAyKSkgJ2IpKQo7MgoKKHByaW50IChmYXBwbHkgZjEgJ3gpKQo7Ym9vayBpbmNvcnJlY3QgLSBwcmVzdW1lIHRoZXkgbWVhbiAnYSAtIG1lcmVseSBhIHR5cG8KO05JTCBubyAgYW5zd2VyCgoocHJpbnQgKGZhcHBseSBmMiAneCkpCjtOSUwgbm8gIGFuc3dlcgoKKHByaW50IChmYXBwbHkgZjMgJ3gpKQo7TklMIG5vICBhbnN3ZXIKCihwcmludCAoZmFwcGx5IGYxICdhKSkKOzEKCihwcmludCAoZmFwcGx5IGYyICdhKSkKO05JTCBubyBhbnN3ZXIKCihwcmludCAoZmFwcGx5IGYzICdhKSkKOzIK