2014-06-21 29 views
1

在頁面49經驗豐富的策士,我不明白什麼是在下面的代碼(行14-16)事情:經驗豐富的策士:Intersectall(第49頁)

(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一員,不應該被它consed到結果?同樣,在線路15和17:

(else (cons (car s1) (J (cdr s1)))))))) 

如果它不s2一員,應該不是跳過 consed到結果?

回答

1

沒關係......這是一個錯誤:

http://www.ccs.neu.edu/home/matthias/BTSS/errata.html

第13章

頁49:A4:J的COND

第50頁的最後兩個分句的交換答案: Q2:交換J的條件的最後兩個條款的回答

+1

這是一個很好的公式化問題,你很好地解釋了混淆,但由於它是一個簡單的錯誤,可以合理地消除這個問題,因爲它可能不會對其他用戶有所幫助。 (但是,如果您不刪除它,請務必接受您的回答。) –

+1

只要我在本書叢書中發現困難的主題,我就一直依靠Stack Overflow作爲學習助手。所以我想這對其他人也會有所幫助。我會接受答案。 –