Hi,

is it possible to define a macro that does one thing when
it's in operator position and another when it's not?

I want to define a macro `with-vectors` that transforms this:

(with-vectors (v)
    (v 0)
    (set! (v 0) 'foo)
    (some-procedure v))

into this:

(begin
    (vector-ref v 0)
    (vector-set! v 0 'foo)
    (some-procedure v))

So far I have this:

(define-syntax with-vectors
    (syntax-rules ()
        ((_ (id ...) exp ...)
         (let-syntax ((id* (syntax-rules ()
                               ((_ idx) (vector-ref id idx)))) ...)
             exp ...))))

But that obviously only works for the first case: (v 0).

Regards,
Tobias

Reply via email to