【发布时间】:2014-06-21 17:18:01
【问题描述】:
在 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 的成员,不应该将其跳过不进入结果吗?
【问题讨论】:
标签: functional-programming scheme lisp seasoned-schemer