I want to use macros inside a let which is part of an expansion of a top-level 
macro in order to have local bindings visible to macros. 

Is there a difference in implementation (e.g., when inside macros get expanded) 
between using syntax-rules versus syntax-case at the top level.   Is this 
coding considered OK?

(define-syntax foo
  (lambda (x)
    (syntax-case x ()
      ((_ <e>)
       #'(let* ((v (cons 'a #f))
                (doit (lambda (x) (set-cdr! v x))))
           (letrec-syntax
               ((foo-1 (syntax-rules ()
                         ((_ <v>)
                          (doit '<v>)))))
             (foo-1 <e>))
           v)))))

(define-syntax bar
  (syntax-rules ()
    ((_ <e>)
     (let* ((v (cons 'a #f))
            (doit (lambda (x) (set-cdr! v x))))
       (letrec-syntax
           ((foo-1 (syntax-rules ()
                     ((_ <v>)
                      (doit '<v>)))))
         (foo-1 <e>))
       v))))

(foo 1) => (a . 1)
(bar 1) => (a . 1)


Reply via email to