Adding a new statement to Python
eli.thegreenplace.net
eli.thegreenplace.net
http://www.yosefk.com/blog/my-history-with-forth-stack-machi...
my mind was immediately blown away by the following passage right at the top of system.fth, the part of pForth implemented in Forth on top of the C interpreter:
: ( 41 word drop ; immediate
( That was the definition for the comment word. )
( Now we can add comments to what we are doing! ) (defmacro unless [expr & body] `(if ~expr nil (do ~@body)))
Taken from:
http://stackoverflow.com/questions/2977882/defining-clojure-...Macro in Lisp are essentially functions taking code as argument and returning code, but they are executed at compile-time.
Edit: replaced with the correct version, sorry for the error.
(defmacro unless [expr & body] `(if ~expr nil (do ~@body)))On a more serious note, the ability to add constructs to the language is not nearly as unique to LISP as Lispers think it is.
unless := method(call evalArgAt(0) ifFalse(call evalArgAt(1)))
Usage example... unless(1 == 2, writeln("Tis false"))[1] http://blueprintforge.com/blog/2012/02/27/static-modificatio...
[2] http://blip.tv/pycon-us-videos-2009-2010-2011/pycon-2011-wha...
[3] http://docs.python.org/library/ast.html#abstract-grammar
http://tomlee.co/wp-content/uploads/2008/12/python-language-...
Special cases aren't special enough to break the rules. ... There should be one-- and preferably only one --obvious way to do it.
Here's the second section:
A language-advocacy digression
------------------------------
This article doesn’t attempt to suggest the addition of an until statement to Python. Although I think such a statement would make some code clearer, and this article displays how easy it is to add, I completely respect Python’s philosophy of minimalism. All I’m trying to do here, really, is gain some insight into the inner workings of Python.