t3x.org / sketchy / library / filter.html
SketchyLISP
Reference
  Copyright (C) 2007
Nils M Holm

filter

Conformance: R5.91RS Scheme

Purpose: Extract members that match a given predicate from a list.

Arguments:
P - predicate
A - list

Model:

(define (filter p a)
  (cond ((null? a) '())
    ((p (car a))
      (cons (car a) (filter p (cdr a))))
    (else (filter p (cdr a)))))

Implementation:

(define (filter p a)
  (letrec
    ((_filter
       (lambda (a b)
         (cond ((null? a) b)
           ((p (car a))
             (_filter (cdr a) (cons (car a) b)))
           (else (_filter (cdr a) b))))))
    (_filter (reverse a) '())))

Example:

(filter number? '(abc 123 def 456 ghi)) 
=> (123 456)

See also:
memp, remp.