Yes you can, but they are a bit constrained in what they can do. For instance, it's easy to write a debug macro that prints the intermediate value of b+c:
(let [a #d (+ b c)] ...)
So the #d reader macro has access to the following form, but gets ignored at a higher level (i.e. when the "let" form is processed)
(let [a #d (+ b c)] ...)
So the #d reader macro has access to the following form, but gets ignored at a higher level (i.e. when the "let" form is processed)