2010/02/24

続 TSS multirember

なるほど、こう書けるんですね!
読めるし分かるのですが、書けません・・・。
call/ccはわかりませんorz
「再帰結果を束縛」というのは、文字通りの意味でなく、先に底まで再帰して底から戻ってくるときに分岐を行なう、ということで良いんでしょうか。

; multirember
; How To Become A Hacker: 再帰結果は束縛可能 http://beta-reduction.blogspot.com/2010/02/define-multirember-lat-cond-null-lat-eq.html
(define (multirember a lat)
(if (null? lat)
'()
;; (car lat)も二回出てくるんでショートフォームitとして束縛
(let ((it (car lat))
;; 再帰部分もrecurと言う変数に束縛してしまう。
(recur (multirember a (cdr lat))))
(if (eq? a it) ;itの使いまわし
recur ;recurの使いまわし
(cons it recur))))) ;itとrecurの使いまわし
(define (multirember a lat)
(if (null? lat)
'()
(let ((it (car lat))
(recur (multirember a (cdr lat))))
(if (eq? a it)
recur
(cons it recur)))))
(define (multirember a lat)
(call/cc
(lambda (k)
(let ((it (car (if (null? lat)
(k '())
lat)))
(recur (multirember a (cdr lat))))
(if (eq? a it)
recur
(cons it recur))))))


The Little Schemer, 4th EditionThe Seasoned Schemer

0 件のコメント:

コメントを投稿