diff --git a/ice-9/Makefile.am b/ice-9/Makefile.am index 4580ed7c2..c0f0e0d74 100644 --- a/ice-9/Makefile.am +++ b/ice-9/Makefile.am @@ -22,19 +22,23 @@ AUTOMAKE_OPTIONS = foreign # These should be installed and distributed. -ice9_sources = \ - and-let*.scm arrays.scm boot-9.scm calling.scm common-list.scm \ - debug.scm debugger.scm documentation.scm emacs.scm expect.scm \ - format.scm getopt-long.scm hcons.scm lineio.scm ls.scm \ - mapping.scm networking.scm null.scm optargs.scm poe.scm popen.scm \ - posix.scm psyntax.pp psyntax.ss q.scm r4rs.scm r5rs.scm \ - rdelim.scm receive.scm srfi-8.scm \ - regex.scm runq.scm safe-r5rs.scm safe.scm session.scm slib.scm \ +ice9_sources = \ + and-let-star.scm arrays.scm boot-9.scm calling.scm common-list.scm \ + debug.scm debugger.scm documentation.scm emacs.scm expect.scm \ + format.scm getopt-long.scm hcons.scm lineio.scm ls.scm \ + mapping.scm networking.scm null.scm optargs.scm poe.scm popen.scm \ + posix.scm psyntax.pp psyntax.ss q.scm r4rs.scm r5rs.scm \ + rdelim.scm receive.scm srfi-8.scm \ + regex.scm runq.scm safe-r5rs.scm safe.scm session.scm slib.scm \ streams.scm string-fun.scm syncase.scm tags.scm threads.scm subpkgdatadir = $(pkgdatadir)/$(VERSION)/ice-9 subpkgdata_DATA = $(ice9_sources) ETAGS_ARGS = $(subpkgdata_DATA) +install-data-local: + -$(INSTALL_DATA) and-let-star-compat.scm \ + $(subpkgdatadir)/'and-let*.scm' + ## test.scm is not currently installed. -EXTRA_DIST = $(ice9_sources) test.scm +EXTRA_DIST = $(ice9_sources) test.scm and-let-star-compat.scm diff --git a/ice-9/and-let*.scm b/ice-9/and-let*.scm deleted file mode 100644 index e69de29bb..000000000 diff --git a/ice-9/and-let-star-compat.scm b/ice-9/and-let-star-compat.scm new file mode 100644 index 000000000..497082458 --- /dev/null +++ b/ice-9/and-let-star-compat.scm @@ -0,0 +1,11 @@ +;;;; This file will be installed as "and-let*.scm" on systems that +;;;; support it. It will go away in the future, use the module +;;;; (and-let-star) instead. + +(define-module (ice-9 and-let*) + :use-module (ice-9 and-let-star)) + +(display ";;; The module name (ice-9 and-let*) is deprecated.\n") +(display ";;; Use (ice-9 and-let-star) instead.\n\n") + +(export-syntax and-let*) diff --git a/ice-9/and-let-star.scm b/ice-9/and-let-star.scm new file mode 100644 index 000000000..4055d17fe --- /dev/null +++ b/ice-9/and-let-star.scm @@ -0,0 +1,48 @@ +;;;; and-let-star.scm --- and-let* syntactic form (draft SRFI-2) for Guile +;;;; written by Michael Livshin +;;;; +;;;; Copyright (C) 1999 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 + +(define-module (ice-9 and-let-star)) + +(defmacro and-let* (vars . body) + + (define (expand vars body) + (cond + ((null? vars) + `(begin ,@body)) + ((pair? vars) + (let ((exp (car vars))) + (cond + ((pair? exp) + (cond + ((null? (cdr exp)) + `(and ,(car exp) ,(expand (cdr vars) body))) + (else + (let ((var (car exp)) + (val (cadr exp))) + `(let (,exp) + (and ,var ,(expand (cdr vars) body))))))) + (else + `(and ,exp ,(expand (cdr vars) body)))))) + (else + (error "not a proper list" vars)))) + + (expand vars body)) + +(export-syntax and-let*)