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:
parent
1204ecc349
commit
31a0d94d6f
1 changed files with 10 additions and 8 deletions
|
@ -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
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue