Implementation for the R6RS (rnrs lists) library.
authorJulian Graham <julian.graham@aya.yale.edu>
Sat, 20 Mar 2010 00:03:46 +0000 (20:03 -0400)
committerJulian Graham <julian.graham@aya.yale.edu>
Fri, 21 May 2010 01:18:02 +0000 (21:18 -0400)
* module/Makefile.am: Add module/rnrs/6/lists.scm to RNRS_SOURCES.
* module/rnrs/6/lists.scm: New file.

module/Makefile.am
module/rnrs/6/lists.scm [new file with mode: 0644]

index dbcc405..8e52a3d 100644 (file)
@@ -260,14 +260,15 @@ RNRS_SOURCES =                                    \
   rnrs/6/conditions.scm                                \
   rnrs/6/control.scm                           \
   rnrs/6/exceptions.scm                                \
+  rnrs/6/lists.scm                             \
   rnrs/6/syntax-case.scm                       \
   rnrs/arithmetic/6/bitwise.scm                        \
   rnrs/bytevector.scm                          \
+  rnrs/io/6/simple.scm                         \
+  rnrs/io/ports.scm                            \
   rnrs/records/6/inspection.scm                        \
   rnrs/records/6/procedural.scm                        \
-  rnrs/records/6/syntactic.scm                 \
-  rnrs/io/ports.scm                            \
-  rnrs/io/6/simple.scm
+  rnrs/records/6/syntactic.scm
 
 EXTRA_DIST += scripts/ChangeLog-2008
 EXTRA_DIST += scripts/README
diff --git a/module/rnrs/6/lists.scm b/module/rnrs/6/lists.scm
new file mode 100644 (file)
index 0000000..7544a73
--- /dev/null
@@ -0,0 +1,40 @@
+;;; lists.scm --- The R6RS list utilities library
+
+;;      Copyright (C) 2010 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
+;; License as published by the Free Software Foundation; either
+;; version 3 of the License, or (at your option) any later version.
+;; 
+;; This library is distributed in the hope that it will be useful,
+;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+;; Lesser General Public License for more details.
+;; 
+;; You should have received a copy of the GNU Lesser General Public
+;; License along with this library; if not, write to the Free Software
+;; Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+\f
+
+(library (rnrs lists (6))
+  (export find for-all exists filter partition fold-left fold-right remp remove 
+         remv remq memp member memv memq assp assoc assv assq cons*)
+  (import (rnrs base (6))
+          (only (guile) (filter member memv memq assoc assv assq cons*))
+         (only (srfi srfi-1) (find partition fold-right filter-map))
+         (rename (srfi srfi-1) (fold fold-left) 
+                               (any exists) 
+                               (every for-all)
+                               (remove remp)
+                               
+                               (member memp-internal)
+                               (assoc assp-internal)))
+
+  (define (remove obj list) (remp (lambda (elt) (equal? obj elt)) list))
+  (define (remv obj list) (remp (lambda (elt) (eqv? obj elt)) list))
+  (define (remq obj list) (remp (lambda (elt) (eq? obj elt)) list))
+
+  (define (memp pred list) (memp-internal #f list pred))
+  (define (assp pred list) (assp-internal #f list pred))
+)