在The Seasoned Schemer的第 49 页,我无法理解以下代码中发生了什么(第 14-16 行):
(define intersectall
(lambda (lset)
(letcc hop
(letrec
((A (lambda (lset)
(cond ((null? (car lset)) (hop '()))
((null? (cdr lset)) (car lset))
(else (I (car lset)
(A (cdr lset)))))))
(I (lambda (s1 s2)
(letrec
((J (lambda (s1)
(cond ((null? s1) '())
((member? (car s1) s2) (J (cdr s1))) ; (14)
(else (cons (car s1) ; (15)
(J (cdr s1)))))))) ; (16)
(cond ((null? s2) '())
(else (J s1)))))))
(cond ((null? lset) '())
(else (A lset)))))))
我的疑问在第 14 行:
((member? (car s1) s2) (J (cdr s1)))
如果(car s1)
是 的成员s2
,不应该将其包含在结果中吗?同样,在第 15 行和第 17 行:
(else (cons (car s1) (J (cdr s1))))))))
如果它不是的成员s2
,不应该跳过它而不将其包含在结果中吗?