Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Clojure -- is the dispatch macro special?

Tags:

macros

clojure

I wanted to wrap the dispatch macro in another for cleanliness. However, Clojure seems to treat it differently ... or perhaps I am misunderstanding something? Let's look at the case of simply making an alias for #.

This works:

(defmacro mkDef [x y] `~(list 'def x y))

But this doesn't:

(defmacro mkDispatch [x] `~(list '# x))

Thanks!!

P.S. someone with enough rep: please create a syntax-macros tag; I'd love to be able to search for similar questions better.

like image 886
gatoatigrado Avatar asked Jun 20 '11 03:06

gatoatigrado


1 Answers

The # dispatch macro is a reader macro, and reader macros cannot be implemented using regular macros; they're interpreted by (read) instead of (eval).

like image 166
Joost Diepenmaat Avatar answered Nov 15 '22 07:11

Joost Diepenmaat