What can you do in LISP that you can't do in Python

Cameron Laird claird at starbase.neosoft.com
Mon May 14 15:01:46 EDT 2001


In article <mailman.989861961.6105.python-list at python.org>,
Steven D. Majewski <sdm7g at Virginia.EDU> wrote:
>
>
>I was about to bring up Turing Completeness, but Alex beat me to it!
>
>But for an example to consider: 
>
> Pretend for a moment that you had a problem where you absolutely 
>required something like Lisp macros.
>
> In python, you could always the the equivalent behaviour with a 
>python function that outputs a new python module that could be
>imported. Programs that write programs isn't a feature that only
>Lisp can do. 
>
> However, because of Lisp's trivial syntax, as well as functions
>designed for reading lisp expressions, processing Lisp code is 
>trivially easy. Lisp macros are written in a sort of substitution
>template. 
>
> Doing the same thing in Python requires a Python parser. Of course,
>you just happed to have access to the one built into Python from 
>the parser module. ( "import parser" ) 
> However, other than occasionally  eval-ing small expressions, I 
>think most Python programmers would, rather than write some sort
>of textual code processing, would use the reflective features of
>the language manipulate classes, functions, code-objects, et.al. 
>at a different level. 
>
> I haven't followed Dylan for a while (Dylan is a language that's
>sort of like an Object-oriented Scheme in it's semantics, but with
>a more "algolish" syntax ) but, long ago, there was discussion of
>a macro system for Dylan, which was planned to be a non-textual
>transformation of deeper structures from the parse tree. 
>
> If you were going to do macros for Python, that would be the way
>to do it -- however, I wonder if that style of macro would ever 
>feel as natural as Lisp's.  I suspect that Python programmers would
>STILL try to find another way to do it. 
>
> There's a lot more to a computer language that a list of features!
			.
			.
			.
I have a pet belief that hygienic macros as practiced
in Lisp are somewhat overdone (I know my own fondness
for extreme factorization), and of material interest
largely for a single category of use:  "self-modifying"
code which amounts to initialized method definition.
Exactly the same calculations are available in a purely
run-time formulation, withOUT macro funniness, but at
the cost of more run-time calculation.

Until I have more evidence to the contrary, I expect
correct macro usage to be a performance optimization.

Python admits fine, powerful metaprogrammability.  It
needn't apologize.
-- 

Cameron Laird <claird at NeoSoft.com>
Business:  http://www.Phaseit.net
Personal:  http://starbase.neosoft.com/~claird/home.html



More information about the Python-list mailing list