Macros don't seem to be hygienic in Release 10.1.10
(define (quux) (display "quux") 'quux)
(define (foo) (display "foo") #f)
(define-syntax or2
(syntax-rules ()
((or2 form1 form2)
(let ((temp form1))
(if temp
temp
form2)))))
(let ((temp (quux))) (or2 (foo) temp))
quuxfoo
#f ; Wrong! Should be 'quux
(let ((temp1 (quux))) (or2 (foo) temp1))
quuxfoo
'quux
The binding of temp introduced by the macro is shadowing the binding of temp at the call site in the first example. The second example shows the expected behavior.
--
~jrm