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:
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>
|
||||
|
||||
* srfi-14.c (scm_char_set_diff_plus_intersection): wasn't correctly
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue