mirror of
https://git.savannah.gnu.org/git/guile.git
synced 2025-06-11 22:31:12 +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:
parent
3524efbcd9
commit
848458d990
2 changed files with 15 additions and 10 deletions
|
@ -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>
|
2001-07-31 Gary Houston <ghouston@arglist.com>
|
||||||
|
|
||||||
* srfi-14.c (scm_char_set_diff_plus_intersection): wasn't correctly
|
* srfi-14.c (scm_char_set_diff_plus_intersection): wasn't correctly
|
||||||
|
|
|
@ -720,11 +720,15 @@
|
||||||
;;; Filtering & partitioning
|
;;; Filtering & partitioning
|
||||||
|
|
||||||
(define (filter pred list)
|
(define (filter pred list)
|
||||||
(if (null? list)
|
(letrec ((filiter (lambda (pred rest result)
|
||||||
'()
|
(if (null? rest)
|
||||||
(if (pred (car list))
|
(reverse! result)
|
||||||
(cons (car list) (filter pred (cdr list)))
|
(filiter pred (cdr rest)
|
||||||
(filter pred (cdr list)))))
|
(cond ((pred (car rest))
|
||||||
|
(cons (car rest) result))
|
||||||
|
(else
|
||||||
|
result)))))))
|
||||||
|
(filiter pred list '())))
|
||||||
|
|
||||||
(define (partition pred list)
|
(define (partition pred list)
|
||||||
(if (null? list)
|
(if (null? list)
|
||||||
|
@ -736,11 +740,7 @@
|
||||||
(values in (cons (car list) out))))))
|
(values in (cons (car list) out))))))
|
||||||
|
|
||||||
(define (remove pred list)
|
(define (remove pred list)
|
||||||
(if (null? list)
|
(filter (lambda (x) (not (pred x))) list))
|
||||||
'()
|
|
||||||
(if (pred (car list))
|
|
||||||
(remove pred (cdr list))
|
|
||||||
(cons (car list) (remove pred (cdr list))))))
|
|
||||||
|
|
||||||
(define (filter! pred list)
|
(define (filter! pred list)
|
||||||
(filter pred list)) ; XXX:optimize
|
(filter pred list)) ; XXX:optimize
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue