>>2
Oh look, someone who never learned Lisp is talking about it.
don't have switch special formsWhy would Lisp even waste a special form on that? It has a lot of macros which have all the functionality that you'd want and more:
if cond case ecase ccase typecase etypecase ctypecase
And if those weren't enough (they come with CL), there are various more generalized macros in general purpose library (including a
switch, although
(e/c)(type)case is more than enough for most stuff).
>>1
Macros are a way to extend the compiler, they allow you to generate code at runtime. The main difference between macros in other languages and macros in Lisp is that you can run code which generates code at compile-time, the other difference is that all Lisp code "look" the same, so your new code doesn't look any different from code which only uses the language's symbols (if you want, you could even not use those(use packages to pick which symbols you want and from where) and make a completly new language). There are also reader macros which let you generate code at read time (lexing/parsing-time).