Friday, July 24, 2009

Ex-3.17

(define (count-pairs x)
(define (stored-in-list? x l)
(cond
((null? l) #f)
((eq? (car l) x) #t)
(else (stored-in-list? x (cdr l)))))
(let ((cache nil))
(define (count-pairs-aux x)
(cond
((not (pair? x)) 0)
((stored-in-list? x cache)
(+ (count-pairs-aux (car x))
(count-pairs-aux (cdr x))))
(else
(set! cache (cons x cache))
(+ (count-pairs-aux (car x))
(count-pairs-aux (cdr x))
1))))
(count-pairs-aux x)))

No comments:

Post a Comment