I've been reading about macros, mainly how they're used in LISP (such as <https://stackoverflow.com/questions/267862/what-makes-lisp-macros-so-special> , <https://jameshunt.us/writings/why-lisp>/ and Andy Gavin's explanation of GOOL), but the thing that I can't seem to find on any discussion is the _why_ or _when_ you should use a macro.
What I mean is, many times, the examples used are too simple, like "I want to define a macro for calculating the square of a number", followed by a lengthy explanation of how it works, sometimes comparing LISP macros to C macros, or showing how to make a macro that is the same as a specific function. Ok, but _why_ should I bother with that if I can make a function/procedure that does the same thing? Even the example in the [Nim by Example](https://nim-by-example.github.io/macros/) talks about "repetition", but the macro code only reduces a bit of what's needed to define a new class. In my untrained eyes, that doesn't look worth the effort. I understand the "rewriting code at runtime", but, again, why or when should I actually care about that? What are some real use cases where a macro "works better" than a function? Are there any good resources (books, courses, posts) that explain this in depth?
