diff options
author | Mark H Weaver <mhw@netris.org> | 2012-10-30 23:46:31 -0400 |
---|---|---|
committer | Mark H Weaver <mhw@netris.org> | 2012-10-30 23:46:31 -0400 |
commit | fa980bcc0f5b186b98d84fc5d165d35fcbb5d5ec (patch) | |
tree | 411ee841f7526fe7138e42cf399911518df06309 /module/srfi/srfi-31.scm | |
parent | e088b09d7dce5d78c96288778969876b6d25d726 (diff) | |
parent | 10744b7c5007ccac19ea9654be6e749fe6a60992 (diff) | |
download | guile-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.scm | 26 |
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)))) |