1
Fork 0
mirror of https://git.savannah.gnu.org/git/guile.git synced 2025-05-01 04:10:18 +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)
(if (null? rest)
(let lp ((l clist1))
(let lp ((l clist1)
(rl '()))
(if (null? l)
'()
(reverse! rl)
(let ((res (f (car l))))
(if res
(cons res (lp (cdr l)))
(lp (cdr l))))))
(let lp ((l (cons clist1 rest)))
(lp (cdr l) (cons res rl))
(lp (cdr l) rl)))))
(let lp ((l (cons clist1 rest))
(rl '()))
(if (any1 null? l)
'()
(reverse! rl)
(let ((res (apply f (map1 car l))))
(if res
(cons res (lp (map1 cdr l)))
(lp (map1 cdr l))))))))
(lp (map1 cdr l) (cons res rl))
(lp (map1 cdr l) rl)))))))
;;; Filtering & partitioning