mirror of
https://git.savannah.gnu.org/git/guile.git
synced 2025-05-11 00:00:49 +02:00
54 lines
1.2 KiB
Scheme
54 lines
1.2 KiB
Scheme
;;;"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
|