以下のコードは上が正しく動作するわけだけど、The Seasoned Schemer には下のコードが記載されています。
私のように適当に読むとハマるかも。
((member? (car s1) s2) (cons (car s1) (J (cdr s1)))) (else (J (cdr s1))))))) |
((member? (car s1) s2) (J (cdr s1))) (else (cons (car s1) (J (cdr s1)))))))) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
; intersectall | |
; all in one ? | |
(define intersectall | |
(lambda (lset) | |
(let/cc hop | |
(letrec | |
((A (lambda (lset) | |
(cond | |
((null? (car lset)) | |
(hop (quote ()))) | |
((null? (cdr lset)) | |
(car lset)) | |
(else (I (car lset) | |
(A (cdr lset))))))) | |
(I (lambda (s1 s2) | |
(letrec | |
((J (lambda (s1) | |
(cond | |
((null? s1)(quote ())) | |
((member? (car s1) s2) | |
(cons (car s1) | |
(J (cdr s1)))) | |
(else (J (cdr s1))))))) | |
(cond | |
((null? s2)(hop (quote ()))) | |
(else (J s1))))))) | |
(cond | |
((null? lset)(hop (quote ()))) | |
(else (A lset))))))) |
0 件のコメント:
コメントを投稿