summaryrefslogtreecommitdiffstats
path: root/macrotst.scm
diff options
context:
space:
mode:
Diffstat (limited to 'macrotst.scm')
-rw-r--r--macrotst.scm54
1 files changed, 54 insertions, 0 deletions
diff --git a/macrotst.scm b/macrotst.scm
new file mode 100644
index 0000000..b5b5046
--- /dev/null
+++ b/macrotst.scm
@@ -0,0 +1,54 @@
+;;;"macrotst.scm" Test for R4RS Macros
+;;; From Revised^4 Report on the Algorithmic Language Scheme
+;;; Editors: William Clinger and Jonathon Rees
+;
+; We intend this report to belong to the entire Scheme community, and so
+; we grant permission to copy it in whole or in part without fee. In
+; particular, we encourage implementors of Scheme to use this report as
+; a starting point for manuals and other documentation, modifying it as
+; necessary.
+
+;;; To run this code type
+;;; (require 'macro)
+;;; (macro:load "macrotst.scm")
+
+(write "this code should print now, outer, and 7") (newline)
+
+(write
+ (let-syntax ((when (syntax-rules ()
+ ((when test stmt1 stmt2 ...)
+ (if test
+ (begin stmt1
+ stmt2 ...))))))
+ (let ((if #t))
+ (when if (set! if 'now))
+ if)))
+(newline)
+;;; ==> now
+
+(write
+ (let ((x 'outer))
+ (let-syntax ((m (syntax-rules () ((m) x))))
+ (let ((x 'inner))
+ (m)))))
+(newline)
+;;; ==> outer
+(write
+ (letrec-syntax
+ ((or (syntax-rules ()
+ ((or) #f)
+ ((or e) e)
+ ((or e1 e2 ...)
+ (let ((temp e1))
+ (if temp temp (or e2 ...)))))))
+ (let ((x #f)
+ (y 7)
+ (temp 8)
+ (let odd?)
+ (if even?))
+ (or x
+ (let temp)
+ (if y)
+ y))))
+(newline)
+;;; ==> 7