(funcq-assoc): Rewrite, don't assume '() is false, and
authorKevin Ryde <user42@zip.com.au>
Wed, 8 Oct 2003 22:57:52 +0000 (22:57 +0000)
committerKevin Ryde <user42@zip.com.au>
Wed, 8 Oct 2003 22:57:52 +0000 (22:57 +0000)
actually traverse the given alist.

ice-9/poe.scm

index bd7f242..2f3879b 100644 (file)
                        (cdr arg-list))))))
     it))
 
+;; return true if lists X and Y are the same length and each element is `eq?'
+(define (eq?-list x y)
+  (if (null? x)
+      (null? y)
+      (and (not (null? y))
+          (eq? (car x) (car y))
+          (eq?-list (cdr x) (cdr y)))))
+
 (define (funcq-assoc arg-list alist)
-  (let ((it (and alist
-                (let and-map ((key arg-list)
-                              (entry (caar alist)))
-                  (or (and (and (not key) (not entry))
-                           (car alist))
-                      (and key entry
-                           (eq? (car key) (car entry))
-                           (and-map (cdr key) (cdr entry))))))))
-    it))
+  (if (null? alist)
+      #f
+      (if (eq?-list arg-list (caar alist))
+         (car alist)
+         (funcq-assoc arg-list (cdr alist)))))