1
Fork 0
mirror of https://git.savannah.gnu.org/git/guile.git synced 2025-05-01 20:30:28 +02:00

(funcq-assoc): Rewrite, don't assume '() is false, and

actually traverse the given alist.
This commit is contained in:
Kevin Ryde 2003-10-08 22:57:52 +00:00
parent df5af69a91
commit d6532dd1cf

View file

@ -58,16 +58,20 @@
(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)))))