From 31a0d94d6f2f55fa5b2233f20f159c98b4707ba9 Mon Sep 17 00:00:00 2001 From: Kevin Ryde Date: Sat, 4 Dec 2004 22:23:16 +0000 Subject: [PATCH] (filter-map): Change to a tail-recursive form. --- srfi/srfi-1.scm | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/srfi/srfi-1.scm b/srfi/srfi-1.scm index 5529d6201..e355431bd 100644 --- a/srfi/srfi-1.scm +++ b/srfi/srfi-1.scm @@ -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