diff --git a/ice-9/ChangeLog b/ice-9/ChangeLog index 43a717e0a..1334a7ac3 100644 --- a/ice-9/ChangeLog +++ b/ice-9/ChangeLog @@ -1,3 +1,7 @@ +2003-03-20 Mikael Djurfeldt + + * list.scm: New file. + 2003-03-19 Marius Vollmer * format.scm (format:out-substr): Update the column counter diff --git a/ice-9/list.scm b/ice-9/list.scm new file mode 100644 index 000000000..6f3de90e6 --- /dev/null +++ b/ice-9/list.scm @@ -0,0 +1,61 @@ +;;;; List functions not provided in R5RS or srfi-1 + +;;; Copyright (C) 2003 Free Software Foundation, Inc. +;;; +;;; This program is free software; you can redistribute it and/or +;;; modify it under the terms of the GNU General Public License as +;;; published by the Free Software Foundation; either version 2, or +;;; (at your option) any later version. +;;; +;;; This program 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 +;;; General Public License for more details. +;;; +;;; You should have received a copy of the GNU General Public License +;;; along with this software; see the file COPYING. If not, write to +;;; the Free Software Foundation, Inc., 59 Temple Place, Suite 330, +;;; Boston, MA 02111-1307 USA +;;; +;;; As a special exception, the Free Software Foundation gives permission +;;; for additional uses of the text contained in its release of GUILE. +;;; +;;; The exception is that, if you link the GUILE library with other files +;;; to produce an executable, this does not by itself cause the +;;; resulting executable to be covered by the GNU General Public License. +;;; Your use of that executable is in no way restricted on account of +;;; linking the GUILE library code into it. +;;; +;;; This exception does not however invalidate any other reasons why +;;; the executable file might be covered by the GNU General Public License. +;;; +;;; This exception applies only to the code released by the +;;; Free Software Foundation under the name GUILE. If you copy +;;; code from other Free Software Foundation releases into a copy of +;;; GUILE, as the General Public License permits, the exception does +;;; not apply to the code that you add in this way. To avoid misleading +;;; anyone as to the status of such modified files, you must delete +;;; this exception notice from them. +;;; +;;; If you write modifications of your own for GUILE, it is your choice +;;; whether to permit this exception to apply to your modifications. +;;; If you do not wish that, delete this exception notice. + +(define-module (ice-9 list) + :export (rassoc rassv rassq)) + +(define (generic-rassoc key alist =) + (let loop ((ls alist)) + (and (not (null? ls)) + (if (= key (cdar ls)) + (car ls) + (loop (cdr ls)))))) + +(define (rassoc key alist . =) + (generic-rassoc key alist (if (null? =) equal? (car =)))) + +(define (rassv key alist) + (generic-rassoc key alist eqv?)) + +(define (rassv key alist) + (generic-rassoc key alist eq?))