1
Fork 0
mirror of https://git.savannah.gnu.org/git/guile.git synced 2025-05-02 13:00:26 +02:00

(filter-map): Change to a tail-recursive form.

This commit is contained in:
Kevin Ryde 2004-12-04 22:23:16 +00:00
parent 1204ecc349
commit 31a0d94d6f

View file

@ -730,20 +730,22 @@
(define (filter-map f clist1 . rest) (define (filter-map f clist1 . rest)
(if (null? rest) (if (null? rest)
(let lp ((l clist1)) (let lp ((l clist1)
(rl '()))
(if (null? l) (if (null? l)
'() (reverse! rl)
(let ((res (f (car l)))) (let ((res (f (car l))))
(if res (if res
(cons res (lp (cdr l))) (lp (cdr l) (cons res rl))
(lp (cdr l)))))) (lp (cdr l) rl)))))
(let lp ((l (cons clist1 rest))) (let lp ((l (cons clist1 rest))
(rl '()))
(if (any1 null? l) (if (any1 null? l)
'() (reverse! rl)
(let ((res (apply f (map1 car l)))) (let ((res (apply f (map1 car l))))
(if res (if res
(cons res (lp (map1 cdr l))) (lp (map1 cdr l) (cons res rl))
(lp (map1 cdr l)))))))) (lp (map1 cdr l) rl)))))))
;;; Filtering & partitioning ;;; Filtering & partitioning