summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--srfi/ChangeLog9
-rw-r--r--srfi/srfi-17.scm135
2 files changed, 111 insertions, 33 deletions
diff --git a/srfi/ChangeLog b/srfi/ChangeLog
index a54be2fa9..538362156 100644
--- a/srfi/ChangeLog
+++ b/srfi/ChangeLog
@@ -1,3 +1,12 @@
+2004-04-24 Dirk Herrmann <dirk@dirk-herrmanns-seiten.de>
+
+ * srfi-17.scm (setter, car, cdr etc.): When within one define
+ expression a new variable in the local module is defined in terms
+ of an equally named variable from some other module, use @ to
+ refer to the variable in the other module. This is necessary due
+ to section 5.2.1 of R5RS: In a define expression first the new
+ binding is created and then the expression is evaluated.
+
2004-04-24 Kevin Ryde <user42@zip.com.au>
* srfi-11.scm (let-values): Use make-symbol rather than gensym, for
diff --git a/srfi/srfi-17.scm b/srfi/srfi-17.scm
index 61456a624..6c4afe241 100644
--- a/srfi/srfi-17.scm
+++ b/srfi/srfi-17.scm
@@ -59,7 +59,7 @@
(define setter
(getter-with-setter
- setter
+ (@ (guile) setter)
(lambda args
(error "Setting setters is not supported for a good reason."))))
@@ -69,37 +69,106 @@
(lambda (obj value)
(setter (location obj) value)))
-(define car (getter-with-setter car set-car!))
-(define cdr (getter-with-setter cdr set-cdr!))
-(define caar (getter-with-setter caar (compose-setter set-car! car)))
-(define cadr (getter-with-setter cadr (compose-setter set-car! cdr)))
-(define cdar (getter-with-setter cdar (compose-setter set-cdr! car)))
-(define cddr (getter-with-setter cddr (compose-setter set-cdr! cdr)))
-(define caaar (getter-with-setter caaar (compose-setter set-car! caar)))
-(define caadr (getter-with-setter caadr (compose-setter set-car! cadr)))
-(define cadar (getter-with-setter cadar (compose-setter set-car! cdar)))
-(define caddr (getter-with-setter caddr (compose-setter set-car! cddr)))
-(define cdaar (getter-with-setter cdaar (compose-setter set-cdr! caar)))
-(define cdadr (getter-with-setter cdadr (compose-setter set-cdr! cadr)))
-(define cddar (getter-with-setter cddar (compose-setter set-cdr! cdar)))
-(define cdddr (getter-with-setter cdddr (compose-setter set-cdr! cddr)))
-(define caaaar (getter-with-setter caaaar (compose-setter set-car! caaar)))
-(define caaadr (getter-with-setter caaadr (compose-setter set-car! caadr)))
-(define caadar (getter-with-setter caadar (compose-setter set-car! cadar)))
-(define caaddr (getter-with-setter caaddr (compose-setter set-car! caddr)))
-(define cadaar (getter-with-setter cadaar (compose-setter set-car! cdaar)))
-(define cadadr (getter-with-setter cadadr (compose-setter set-car! cdadr)))
-(define caddar (getter-with-setter caddar (compose-setter set-car! cddar)))
-(define cadddr (getter-with-setter cadddr (compose-setter set-car! cdddr)))
-(define cdaaar (getter-with-setter cdaaar (compose-setter set-cdr! caaar)))
-(define cdaadr (getter-with-setter cdaadr (compose-setter set-cdr! caadr)))
-(define cdadar (getter-with-setter cdadar (compose-setter set-cdr! cadar)))
-(define cdaddr (getter-with-setter cdaddr (compose-setter set-cdr! caddr)))
-(define cddaar (getter-with-setter cddaar (compose-setter set-cdr! cdaar)))
-(define cddadr (getter-with-setter cddadr (compose-setter set-cdr! cdadr)))
-(define cdddar (getter-with-setter cdddar (compose-setter set-cdr! cddar)))
-(define cddddr (getter-with-setter cddddr (compose-setter set-cdr! cdddr)))
-(define string-ref (getter-with-setter string-ref string-set!))
-(define vector-ref (getter-with-setter vector-ref vector-set!))
+(define car
+ (getter-with-setter (@ (guile) car)
+ set-car!))
+(define cdr
+ (getter-with-setter (@ (guile) cdr)
+ set-cdr!))
+
+(define caar
+ (getter-with-setter (@ (guile) caar)
+ (compose-setter set-car! (@ (guile) car))))
+(define cadr
+ (getter-with-setter (@ (guile) cadr)
+ (compose-setter set-car! (@ (guile) cdr))))
+(define cdar
+ (getter-with-setter (@ (guile) cdar)
+ (compose-setter set-cdr! (@ (guile) car))))
+(define cddr
+ (getter-with-setter (@ (guile) cddr)
+ (compose-setter set-cdr! (@ (guile) cdr))))
+
+(define caaar
+ (getter-with-setter (@ (guile) caaar)
+ (compose-setter set-car! (@ (guile) caar))))
+(define caadr
+ (getter-with-setter (@ (guile) caadr)
+ (compose-setter set-car! (@ (guile) cadr))))
+(define cadar
+ (getter-with-setter (@ (guile) cadar)
+ (compose-setter set-car! (@ (guile) cdar))))
+(define caddr
+ (getter-with-setter (@ (guile) caddr)
+ (compose-setter set-car! (@ (guile) cddr))))
+(define cdaar
+ (getter-with-setter (@ (guile) cdaar)
+ (compose-setter set-cdr! (@ (guile) caar))))
+(define cdadr
+ (getter-with-setter (@ (guile) cdadr)
+ (compose-setter set-cdr! (@ (guile) cadr))))
+(define cddar
+ (getter-with-setter (@ (guile) cddar)
+ (compose-setter set-cdr! (@ (guile) cdar))))
+(define cdddr
+ (getter-with-setter (@ (guile) cdddr)
+ (compose-setter set-cdr! (@ (guile) cddr))))
+
+(define caaaar
+ (getter-with-setter (@ (guile) caaaar)
+ (compose-setter set-car! (@ (guile) caaar))))
+(define caaadr
+ (getter-with-setter (@ (guile) caaadr)
+ (compose-setter set-car! (@ (guile) caadr))))
+(define caadar
+ (getter-with-setter (@ (guile) caadar)
+ (compose-setter set-car! (@ (guile) cadar))))
+(define caaddr
+ (getter-with-setter (@ (guile) caaddr)
+ (compose-setter set-car! (@ (guile) caddr))))
+(define cadaar
+ (getter-with-setter (@ (guile) cadaar)
+ (compose-setter set-car! (@ (guile) cdaar))))
+(define cadadr
+ (getter-with-setter (@ (guile) cadadr)
+ (compose-setter set-car! (@ (guile) cdadr))))
+(define caddar
+ (getter-with-setter (@ (guile) caddar)
+ (compose-setter set-car! (@ (guile) cddar))))
+(define cadddr
+ (getter-with-setter (@ (guile) cadddr)
+ (compose-setter set-car! (@ (guile) cdddr))))
+(define cdaaar
+ (getter-with-setter (@ (guile) cdaaar)
+ (compose-setter set-cdr! (@ (guile) caaar))))
+(define cdaadr
+ (getter-with-setter (@ (guile) cdaadr)
+ (compose-setter set-cdr! (@ (guile) caadr))))
+(define cdadar
+ (getter-with-setter (@ (guile) cdadar)
+ (compose-setter set-cdr! (@ (guile) cadar))))
+(define cdaddr
+ (getter-with-setter (@ (guile) cdaddr)
+ (compose-setter set-cdr! (@ (guile) caddr))))
+(define cddaar
+ (getter-with-setter (@ (guile) cddaar)
+ (compose-setter set-cdr! (@ (guile) cdaar))))
+(define cddadr
+ (getter-with-setter (@ (guile) cddadr)
+ (compose-setter set-cdr! (@ (guile) cdadr))))
+(define cdddar
+ (getter-with-setter (@ (guile) cdddar)
+ (compose-setter set-cdr! (@ (guile) cddar))))
+(define cddddr
+ (getter-with-setter (@ (guile) cddddr)
+ (compose-setter set-cdr! (@ (guile) cdddr))))
+
+(define string-ref
+ (getter-with-setter (@ (guile) string-ref)
+ string-set!))
+
+(define vector-ref
+ (getter-with-setter (@ (guile) vector-ref)
+ vector-set!))
;;; srfi-17.scm ends here