1
Fork 0
mirror of https://git.savannah.gnu.org/git/guile.git synced 2025-06-25 04:40:19 +02:00

(partition): Change to a tail-recursive form.

This commit is contained in:
Kevin Ryde 2004-12-05 22:19:38 +00:00
parent cabc854555
commit f6ff79c415

View file

@ -747,13 +747,14 @@
(filiter pred list '()))) (filiter pred list '())))
(define (partition pred list) (define (partition pred list)
(let lp ((list list)
(in '())
(out '()))
(if (null? list) (if (null? list)
(values '() '()) (values (reverse! in) (reverse! out))
(if (pred (car list)) (if (pred (car list))
(receive (in out) (partition pred (cdr list)) (lp (cdr list) (cons (car list) in) out)
(values (cons (car list) in) out)) (lp (cdr list) in (cons (car list) out))))))
(receive (in out) (partition pred (cdr list))
(values in (cons (car list) out))))))
(define (remove pred list) (define (remove pred list)
(filter (lambda (x) (not (pred x))) list)) (filter (lambda (x) (not (pred x))) list))