I've encountered countless situations where even a tiny macro made the code more concise, more readable and less error-prone.
Functions are there for direct transformation of some data.
Macros are there for some more sophisticated, not immediately obvious transformation of some meta data.
Functions are at a lower level, macros are at a higher level.
Please remember: your users will use your programming language in unexpected ways: you (as a language designer) are most probably not the smartest human on Planet Earth: so please let someone smarter than you add the things which you were not able to conceive beforehand, thanks!
Functions are there for direct transformation of some data.
Macros are there for some more sophisticated, not immediately obvious transformation of some meta data.
Functions are at a lower level, macros are at a higher level.
Please remember: your users will use your programming language in unexpected ways: you (as a language designer) are most probably not the smartest human on Planet Earth: so please let someone smarter than you add the things which you were not able to conceive beforehand, thanks!
Lisp thinks it this way. Congrats!!