From f6ff79c41579bf82326b2f4b2f9e57c56a4c9b6e Mon Sep 17 00:00:00 2001 From: Kevin Ryde Date: Sun, 5 Dec 2004 22:19:38 +0000 Subject: [PATCH] (partition): Change to a tail-recursive form. --- srfi/srfi-1.scm | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/srfi/srfi-1.scm b/srfi/srfi-1.scm index 8301b68a2..1ff07a559 100644 --- a/srfi/srfi-1.scm +++ b/srfi/srfi-1.scm @@ -747,13 +747,14 @@ (filiter pred list '()))) (define (partition pred list) - (if (null? list) - (values '() '()) - (if (pred (car list)) - (receive (in out) (partition pred (cdr list)) - (values (cons (car list) in) out)) - (receive (in out) (partition pred (cdr list)) - (values in (cons (car list) out)))))) + (let lp ((list list) + (in '()) + (out '())) + (if (null? list) + (values (reverse! in) (reverse! out)) + (if (pred (car list)) + (lp (cdr list) (cons (car list) in) out) + (lp (cdr list) in (cons (car list) out)))))) (define (remove pred list) (filter (lambda (x) (not (pred x))) list))