(define (filter p lst) (let loop ((lst lst) (res '())) (cond ((null? lst) (reverse res)) ((p (car lst)) (loop (cdr lst) (cons (car lst) res))) (else (loop (cdr lst) res))))) (define (any p lst) (let loop ((lst lst)) (cond ((null? lst) #f) ((p (car lst)) #t) (else (loop (cdr lst)))))) (define (all p lst) (let loop ((lst lst)) (cond ((null? lst) #t) ((not (p (car lst))) #f) (else (loop (cdr lst)))))) (define (tabulate n proc) (let loop ((i 1) (res '())) (cond ((> i n) res) (else (loop (add1 i) (cons (proc) res)))))) (define (filter proc lst) (foldl (lambda (zero elem) (if (proc elem) (cons elem zero) zero)) '() lst)) (define (filter-map proc lst) (foldl (lambda (zero elem) (let ((out (proc elem))) (if out (cons out zero) zero))) '() lst))