在经验丰富的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的成员,是否应该跳过它而不将其消耗到结果中?

最佳答案

没有关系。。。这是一个错误:
http://www.ccs.neu.edu/home/matthias/BTSS/errata.html
第十三章
第49页:A4:交换J条件最后两个条款的答案
第50页:问题2:交换J条件最后两个从句的答案

关于functional-programming - 经验丰富的计划者:Intersectall(第49页),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24343999/

10-12 20:20