Commit | Line | Data |
---|---|---|
93a6e9c4 MV |
1 | ;;;; and-let-star.scm --- and-let* syntactic form (draft SRFI-2) for Guile |
2 | ;;;; written by Michael Livshin <mike@olan.com> | |
3 | ;;;; | |
cd5fea8d | 4 | ;;;; Copyright (C) 1999, 2001, 2004, 2006 Free Software Foundation, Inc. |
93a6e9c4 | 5 | ;;;; |
73be1d9e MV |
6 | ;;;; This library is free software; you can redistribute it and/or |
7 | ;;;; modify it under the terms of the GNU Lesser General Public | |
8 | ;;;; License as published by the Free Software Foundation; either | |
53befeb7 | 9 | ;;;; version 3 of the License, or (at your option) any later version. |
93a6e9c4 | 10 | ;;;; |
73be1d9e | 11 | ;;;; This library is distributed in the hope that it will be useful, |
93a6e9c4 | 12 | ;;;; but WITHOUT ANY WARRANTY; without even the implied warranty of |
73be1d9e MV |
13 | ;;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
14 | ;;;; Lesser General Public License for more details. | |
93a6e9c4 | 15 | ;;;; |
73be1d9e MV |
16 | ;;;; You should have received a copy of the GNU Lesser General Public |
17 | ;;;; License along with this library; if not, write to the Free Software | |
92205699 | 18 | ;;;; Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA |
93a6e9c4 | 19 | |
1a179b03 MD |
20 | (define-module (ice-9 and-let-star) |
21 | :export-syntax (and-let*)) | |
93a6e9c4 MV |
22 | |
23 | (defmacro and-let* (vars . body) | |
24 | ||
25 | (define (expand vars body) | |
26 | (cond | |
27 | ((null? vars) | |
3fe213f8 KR |
28 | (if (null? body) |
29 | #t | |
30 | `(begin ,@body))) | |
93a6e9c4 MV |
31 | ((pair? vars) |
32 | (let ((exp (car vars))) | |
33 | (cond | |
34 | ((pair? exp) | |
35 | (cond | |
36 | ((null? (cdr exp)) | |
37 | `(and ,(car exp) ,(expand (cdr vars) body))) | |
38 | (else | |
ac0a9fa3 | 39 | (let ((var (car exp))) |
93a6e9c4 MV |
40 | `(let (,exp) |
41 | (and ,var ,(expand (cdr vars) body))))))) | |
42 | (else | |
43 | `(and ,exp ,(expand (cdr vars) body)))))) | |
44 | (else | |
45 | (error "not a proper list" vars)))) | |
46 | ||
47 | (expand vars body)) | |
b4c0da9c KR |
48 | |
49 | (cond-expand-provide (current-module) '(srfi-2)) |