Writing macros for ClojureScript
If you're new to Lisp languages, you may not be familiar with macros. In essence, Lisp macros differ from macros in other languages in that they are a mechanism by which code itself can be transformed and rewritten. We've already used a number of macros so far in the examples in this book, and, indeed, macros are a core part of ClojureScript and you can and should expect to find yourself using them frequently. They enable us to do things that would not otherwise be possible and to optimize and refactor code in powerful ways.
read and eval
In order for all of what we're about to say to make sense, it'll probably be helpful to first understand a little bit about how programming languages work. With most languages, there exists a reader
function in the compiler that takes a series of strings and transforms the text you provided into an abstract syntax tree. That abstract syntax tree is then passed on to an evaluator, which knows how to take...