1
Fork 0
mirror of https://git.savannah.gnu.org/git/guile.git synced 2025-06-10 14:00:21 +02:00

* srfi-1.scm (filter): replaced with a tail-recursive version.

(remove): implement using filter, to make it tail-recursive.
This commit is contained in:
Gary Houston 2001-08-04 18:37:08 +00:00
parent 3524efbcd9
commit 848458d990
2 changed files with 15 additions and 10 deletions

View file

@ -1,3 +1,8 @@
2001-08-04 Gary Houston <ghouston@arglist.com>
* srfi-1.scm (filter): replaced with a tail-recursive version.
(remove): implement using filter, to make it tail-recursive.
2001-07-31 Gary Houston <ghouston@arglist.com>
* srfi-14.c (scm_char_set_diff_plus_intersection): wasn't correctly

View file

@ -720,11 +720,15 @@
;;; Filtering & partitioning
(define (filter pred list)
(if (null? list)
'()
(if (pred (car list))
(cons (car list) (filter pred (cdr list)))
(filter pred (cdr list)))))
(letrec ((filiter (lambda (pred rest result)
(if (null? rest)
(reverse! result)
(filiter pred (cdr rest)
(cond ((pred (car rest))
(cons (car rest) result))
(else
result)))))))
(filiter pred list '())))
(define (partition pred list)
(if (null? list)
@ -736,11 +740,7 @@
(values in (cons (car list) out))))))
(define (remove pred list)
(if (null? list)
'()
(if (pred (car list))
(remove pred (cdr list))
(cons (car list) (remove pred (cdr list))))))
(filter (lambda (x) (not (pred x))) list))
(define (filter! pred list)
(filter pred list)) ; XXX:optimize