(define multirember-co (lambda (a lat col) (cond ((null? lat) (col '() '())) ((atom? (car lat)) (cond ((eq? (car lat) a) (multirember-co a (cdr lat) (lambda (newlat seen) (col newlat (cons (car lat) seen))))) (else (multirember-co a (cdr lat) (lambda (newlat seen) (col (cons (car lat) newlat) seen)))))) (else (multirember-co a (car lat) (lambda (newlat seen) (multirember-co a (cdr lat) (lambda (newlat2 seen2) (col (cons newlat newlat2) (cons seen seen2))))))))))
100 名前:little schemer [2007/08/24(金) 12:07:05 ]
99です。 上記の質問よりも、最後のelse以下のところをどのように理解すればよいのか ヒントとかをもらえたら助かります。上記の処理の内容は、 (multirember-co 'a '(a b c) (lambda (x y) x)) => (b c) というように、1つめの引数(atom)を2つめの引数(list)から取る処理です。 このとき、2つめの引数が((a b) a b c d)の時に、つまり(car lat)が atomでないときの動作が理解しにくいです。一旦(car lat)に対する処理を 行って、それが最後までいった後に、残りの(cdr lat)への処理を続ける のだと思うのですが、、、、