summaryrefslogtreecommitdiff
path: root/module/srfi/srfi-31.scm
diff options
context:
space:
mode:
authorMark H Weaver <mhw@netris.org>2012-10-30 23:46:31 -0400
committerMark H Weaver <mhw@netris.org>2012-10-30 23:46:31 -0400
commitfa980bcc0f5b186b98d84fc5d165d35fcbb5d5ec (patch)
tree411ee841f7526fe7138e42cf399911518df06309 /module/srfi/srfi-31.scm
parente088b09d7dce5d78c96288778969876b6d25d726 (diff)
parent10744b7c5007ccac19ea9654be6e749fe6a60992 (diff)
downloadguile-fa980bcc0f5b186b98d84fc5d165d35fcbb5d5ec.tar.gz
Merge remote-tracking branch 'origin/stable-2.0'
Moved scm_i_struct_hash from struct.c to hash.c and made it static. The port's alist is now a field of 'scm_t_port'. Conflicts: libguile/arrays.c libguile/hash.c libguile/ports.c libguile/print.h libguile/read.c
Diffstat (limited to 'module/srfi/srfi-31.scm')
-rw-r--r--module/srfi/srfi-31.scm26
1 files changed, 12 insertions, 14 deletions
diff --git a/module/srfi/srfi-31.scm b/module/srfi/srfi-31.scm
index 4238dc269..cf67e8af5 100644
--- a/module/srfi/srfi-31.scm
+++ b/module/srfi/srfi-31.scm
@@ -1,6 +1,6 @@
;;; srfi-31.scm --- special form for recursive evaluation
-;; Copyright (C) 2004, 2006 Free Software Foundation, Inc.
+;; Copyright (C) 2004, 2006, 2012 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
@@ -19,17 +19,15 @@
;;; Original author: Rob Browning <rlb@defaultvalue.org>
(define-module (srfi srfi-31)
- :export-syntax (rec))
+ #:export (rec))
-(define-macro (rec arg-form . body)
- (cond
- ((and (symbol? arg-form) (= 1 (length body)))
- ;; (rec S (cons 1 (delay S)))
- `(letrec ((,arg-form ,(car body)))
- ,arg-form))
- ;; (rec (f x) (+ x 1))
- ((list? arg-form)
- `(letrec ((,(car arg-form) (lambda ,(cdr arg-form) ,@body)))
- ,(car arg-form)))
- (else
- (error "syntax error in rec form" `(rec ,arg-form ,@body)))))
+(define-syntax rec
+ (syntax-rules ()
+ "Return the given object, defined in a lexical environment where
+NAME is bound to itself."
+ ((_ (name . formals) body ...) ; procedure
+ (letrec ((name (lambda formals body ...)))
+ name))
+ ((_ name expr) ; arbitrary object
+ (letrec ((name expr))
+ name))))