Use SRFI-1 in `(oop goops util)'.
authorLudovic Courtès <ludo@gnu.org>
Tue, 18 Mar 2008 09:09:56 +0000 (09:09 +0000)
committerLudovic Courtès <ludo@gnu.org>
Tue, 18 Mar 2008 09:09:56 +0000 (09:09 +0000)
oop/ChangeLog
oop/goops/util.scm

index c174ec4cfc2e974f72e383bdcb95e10e8037dd1e..c1c4aebf697d566e86a316f1c3d4a032031c87bb 100644 (file)
@@ -1,3 +1,9 @@
+2008-03-18  Ludovic Courtès  <ludo@gnu.org>
+
+       * goops/util.scm (mapappend): Now an alias for SRFI-1's
+       `append-map', which is more efficient.
+       (every, any): Used and re-exported from SRFI-1.
+
 2008-03-12  Ludovic Courtès  <ludo@gnu.org>
 
        * goops/describe.scm (describe): Provide `describe' (symbol),
index 33e871c54a6985543e797f85a48943cbfa32f6ed..b6276aa37e8708729ba60af56c0030076a340c2a 100644 (file)
@@ -1,4 +1,4 @@
-;;;;   Copyright (C) 1999, 2000, 2001, 2003, 2006 Free Software Foundation, Inc.
+;;;;   Copyright (C) 1999, 2000, 2001, 2003, 2006, 2008 Free Software Foundation, Inc.
 ;;;; 
 ;;;; This library is free software; you can redistribute it and/or
 ;;;; modify it under the terms of the GNU Lesser General Public
 \f
 
 (define-module (oop goops util)
-  :export (any every
-          mapappend find-duplicate top-level-env top-level-env?
+  :export (mapappend find-duplicate top-level-env top-level-env?
           map* for-each* length* improper->proper)
+  :use-module (srfi srfi-1)
+  :re-export  (any every)
   :no-backtrace
   )
 
 ;;; {Utilities}
 ;;;
 
-(define (any pred lst . rest)
-  (if (null? rest) ;fast path
-      (and (not (null? lst))
-           (let loop ((head (car lst)) (tail (cdr lst)))
-             (if (null? tail)
-                 (pred head)
-                 (or (pred head)
-                     (loop (car tail) (cdr tail))))))
-      (let ((lsts (cons lst rest)))
-        (and (not (any null? lsts))
-             (let loop ((heads (map car lsts)) (tails (map cdr lsts)))
-               (if (any null? tails)
-                   (apply pred heads)
-                   (or (apply pred heads)
-                       (loop (map car tails) (map cdr tails)))))))))
-
-(define (every pred lst . rest)
-  (if (null? rest) ;fast path
-      (or (null? lst)
-          (let loop ((head (car lst)) (tail (cdr lst)))
-            (if (null? tail)
-                (pred head)
-                (and (pred head)
-                     (loop (car tail) (cdr tail))))))
-      (let ((lsts (cons lst rest)))
-        (or (any null? lsts)
-            (let loop ((heads (map car lsts)) (tails (map cdr lsts)))
-              (if (any null? tails)
-                  (apply pred heads)
-                  (and (apply pred heads)
-                       (loop (map car tails) (map cdr tails)))))))))
-
-(define (mapappend func . args)
-  (if (memv '()  args)
-      '()
-      (append (apply func (map car args))
-             (apply mapappend func (map cdr args)))))
+(define mapappend append-map)
 
 (define (find-duplicate l)     ; find a duplicate in a list; #f otherwise
   (cond