174 |
filter-map |
filter-map |
175 |
|
|
176 |
;;; Filtering & partitioning |
;;; Filtering & partitioning |
177 |
filter |
;; filter <= in the core |
178 |
partition |
partition |
179 |
remove |
remove |
180 |
filter! |
;; filter! <= in the core |
181 |
partition! |
partition! |
182 |
remove! |
remove! |
183 |
|
|
687 |
|
|
688 |
;;; Filtering & partitioning |
;;; Filtering & partitioning |
689 |
|
|
|
(define (filter pred list) |
|
|
(check-arg-type list? list "filter") ; reject circular lists. |
|
|
(letrec ((filiter (lambda (pred rest result) |
|
|
(if (null? rest) |
|
|
(reverse! result) |
|
|
(filiter pred (cdr rest) |
|
|
(cond ((pred (car rest)) |
|
|
(cons (car rest) result)) |
|
|
(else |
|
|
result))))))) |
|
|
(filiter pred list '()))) |
|
|
|
|
690 |
(define (partition pred list) |
(define (partition pred list) |
691 |
(if (null? list) |
(if (null? list) |
692 |
(values '() '()) |
(values '() '()) |
699 |
(define (remove pred list) |
(define (remove pred list) |
700 |
(filter (lambda (x) (not (pred x))) list)) |
(filter (lambda (x) (not (pred x))) list)) |
701 |
|
|
|
(define (filter! pred list) |
|
|
(filter pred list)) ; XXX:optimize |
|
|
|
|
702 |
(define (partition! pred list) |
(define (partition! pred list) |
703 |
(partition pred list)) ; XXX:optimize |
(partition pred list)) ; XXX:optimize |
704 |
|
|