I think this example [1,2]:
(define-syntax my-or
(syntax-rules ()
((my-or)
#t)
((my-or exp)
exp)
((my-or exp rest ...)
(let ((t exp))
(if exp
exp
(my-or rest ...))))))
should look like this:
(define-syntax my-or
(syntax-rules ()
((my-or)
#t)
((my-or exp)
exp)
((my-or exp rest ...)
(let ((t exp))
(if t ; <-
t
(my-or rest ...))))))
Otherwise, what's the rationale behind 'let'?
AFAICT, it's described here [3], but Guile is not affected, right? So
the following works as well:
(define-syntax my-or
(syntax-rules ()
((my-or)
#t)
((my-or exp)
exp)
((my-or exp rest ...)
(if exp
exp
(my-or rest ...)))))
Note that 'my-or' is used in several places (e.g., [4]) and it's
necessary to change them all. Also, there are other macros that use
'let' (e.g., 'cond1').
[1] https://gnu.org/software/guile/manual/guile.html#Defining-Macros
[2] https://gnu.org/software/guile/manual/guile.html#Hygiene
[3] http://stackoverflow.com/a/3215238
[4] https://gnu.org/software/guile/manual/guile.html#Syntax-Case
pgpfu4_cGY8ZI.pgp
Description: PGP signature
