If Python had a macro facility similar to Lisp/Scheme (something like MetaPython), how would you use it?
If you are a Lisp/Scheme programmer, what sorts of things do y
Currently, the only way features can be added to Python the language is through a PEP (Python Enhancement Proposal). This can be slow, and doesn't help you in the cases when you want to add a feature to the language that is only useful for your use case.
For example, there's a PEP to add a do-while loop. This will probably be added to Python, but the PEP was created in 2003. I'd like to write do-while
loops today, and I could do that if Python had macros.
Similarly, there was a PEP to add labelled break and continue but this was rejected. If labelled break statements would make my code clearer, I could implement them with a macro.
PEPs aside, I would also like an unless
macro. Rather than writing:
if not is_superman():
dodge_bullet()
I could write:
unless is_superman():
dodge_bullet()
I'd like a case
macro (often called cond
in Lisp). Rather than writing:
if x == FOO:
do_stuff_with_foos()
elif x == BAR:
do_stuff_with_bars()
elif x == BAZ:
do_stuff_with_bazs()
I could write:
switch x:
case FOO:
do_stuff_with_foos()
case BAR:
do_stuff_with_bars()
case BAZ:
do_stuff_with_bazs()
These would be straightforward to implement as macros. More complex, useful macros would include:
"hello there {user}"
(probably best implemented as a reader macro)Currently, these are only features in other languages. With macros, I could add them to Python. I could even write PEPs that included an example implementation. (Some PEPs already do this, but they are forced to modify the C source of the interpreter itself.)