在 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
的成员,是否应该跳过而不是强调结果?
答案 0 :(得分:1)
没关系......这是一个错误:
http://www.ccs.neu.edu/home/matthias/BTSS/errata.html
第13章
第49页:A4:交换J's cond最后两个条款的答案
第50页:Q2:交换J's cond最后两个条款的答案