actually traverse the given alist.
(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)))))