(define (filter-list filter expr) (if (null? expr) '() (let ((first (car expr)) (filtered-rest (filter-list filter (cdr expr)))) (if (filter first) (cons first filtered-rest) filtered-rest)))) ----- > (filter-list list? '((1 2) 3 p () ((6) 7 8))) ((1 2) () ((6) 7 8)) > (define (length-2-list? x) (and (list? x) (= (lenght x) 2))) > (filter-list length-2-list? '((1 2) 3 p () ((6) 7 8))) ((1 2))高階関数を用いることで、このような汎用的につかえる関数を提供する事が出来ます。
99.10.7/ Tomio KAMADA: kamada@cs.kobe-u.ac.jp