(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