guile-cvs
[Top][All Lists]
Advanced

[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



reply via email to

[Prev in Thread] Current Thread [Next in Thread]