も参考に。
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
; multirember -> multirember-f | |
; The Seasoned Schemer | |
(define multirember-f | |
(lambda (test?) | |
(lambda (a lat) | |
(cond ((null? lat) '()) | |
((test? a (car lat))((multirember-f test?) a (cdr lat))) | |
(else (cons (car lat) | |
((multirember-f test?) a (cdr lat)))))))) | |
((multirember-f eq?) 'a '(a b c a b c)) | |
; fold | |
(define (multirember-f test?) | |
(lambda (a lat) | |
(fold (lambda (e l) | |
(if (test? a e) | |
l | |
(cons e l))) | |
'() | |
lat))) | |
((multirember-f eq?) 'a '(a b c a b c)) | |
; 再帰結果は束縛可能 http://beta-reduction.blogspot.com/2010/02/define-multirember-lat-cond-null-lat-eq.html | |
(define (multirember-f test?) | |
(lambda (a lat) | |
(if (null? lat) | |
'() | |
(let ((b (car lat)) | |
(mr ((multirember-f test?) a (cdr lat)))) | |
(if (test? a b) | |
mr | |
(cons b mr)))))) | |
((multirember-f eq?) 'a '(a b c d a b c d)) | |
; letrec multirember-f - The Seasoned Schemer | |
(define multirember-f | |
(lambda (test?) | |
(letrec ((m-f (lambda (a lat) | |
(cond ((null? lat) '()) | |
((test? a (car lat))(m-f a (cdr lat))) | |
(else (cons (car lat) | |
(m-f a (cdr lat)))))))) | |
m-f))) | |
((multirember-f eq?) 1 '(1 2 3 4 5 1 2 3 1 2 3 1 2)) | |
; letrec multirember - The Seasoned Schemer | |
(define multirember | |
(letrec ((multirember | |
(lambda (a lat) | |
(cond ((null? lat) '()) | |
((eq? a (car lat))(multirember a (cdr lat))) | |
(else (cons (car lat) | |
(multirember a (cdr lat)))))))) | |
multirember)) | |
(multirember 'a '(a b a b a b c a)) |
0 件のコメント:
コメントを投稿