[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
guile/guile-core/srfi ChangeLog srfi-1.scm
From: |
Gary Houston |
Subject: |
guile/guile-core/srfi ChangeLog srfi-1.scm |
Date: |
Sat, 04 Aug 2001 11:37:08 -0700 |
CVSROOT: /cvs
Module name: guile
Changes by: Gary Houston <address@hidden> 01/08/04 11:37:08
Modified files:
guile-core/srfi: ChangeLog srfi-1.scm
Log message:
* srfi-1.scm (filter): replaced with a tail-recursive version.
(remove): implement using filter, to make it tail-recursive.
CVSWeb URLs:
http://savannah.gnu.org/cgi-bin/viewcvs/guile/guile-core/srfi/ChangeLog.diff?cvsroot=OldCVS&tr1=1.60&tr2=1.61&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/guile/guile-core/srfi/srfi-1.scm.diff?cvsroot=OldCVS&tr1=1.8&tr2=1.9&r1=text&r2=text
Patches:
Index: guile/guile-core/srfi/ChangeLog
diff -u guile/guile-core/srfi/ChangeLog:1.60
guile/guile-core/srfi/ChangeLog:1.61
--- guile/guile-core/srfi/ChangeLog:1.60 Tue Jul 31 14:42:24 2001
+++ guile/guile-core/srfi/ChangeLog Sat Aug 4 11:37:08 2001
@@ -1,3 +1,8 @@
+2001-08-04 Gary Houston <address@hidden>
+
+ * srfi-1.scm (filter): replaced with a tail-recursive version.
+ (remove): implement using filter, to make it tail-recursive.
+
2001-07-31 Gary Houston <address@hidden>
* srfi-14.c (scm_char_set_diff_plus_intersection): wasn't correctly
Index: guile/guile-core/srfi/srfi-1.scm
diff -u guile/guile-core/srfi/srfi-1.scm:1.8
guile/guile-core/srfi/srfi-1.scm:1.9
--- guile/guile-core/srfi/srfi-1.scm:1.8 Fri Jul 6 14:10:47 2001
+++ guile/guile-core/srfi/srfi-1.scm Sat Aug 4 11:37:08 2001
@@ -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
- guile/guile-core/srfi ChangeLog srfi-1.scm,
Gary Houston <=