返回为3的情况
返回为4的情况
返回为7的情况
不返回死循环的情况
其实就是因为方法无法判断序对是不是同地址,导致同一个序对计算了多次。
#lang R5RS
(define (count-pairs x)
(if (not (pair? x))
0
(+ (count-pairs (car x))
(count-pairs (cdr x))
1)))
(define z1 (list 'a 'b 'c))
(define x (cons 'b 'c))
(define z2 (cons 'a (cons x x)))
(define y (cons x x))
(define z3 (cons y y))
(define z4 (list 'a 'b 'c))
(set-cdr! (cddr z4) z4)
(display (count-pairs z1))
(newline)
(display (count-pairs z2))
(newline)
(display (count-pairs z3))
(newline)
(display (count-pairs z4))
(newline)
输出结果,最后一个是死循环。
3
4
7