Re: Hygenic Macros
Available news archives: comp.lang.tcl - comp.lang.python - comp.security.firewalls - sci.crypt - comp.lang.php - comp.lang.javascript
Google
 
Web news.hping.org


comp.lang.python archive

Re: Hygenic Macros

From: Adriaan Renting <renting@astron.nl>
Date: Tue Oct 18 2005 - 14:17:43 CEST

Using numarray/pylab there's also dot:
>>> from pylab import *
>>> A = array(range(10))
>>> B = array(range(10))
>>> A * B
[ 0, 1, 4, 9,16,25,36,49,64,81,]
>>> dot(A, B)
285

It might also make your code more readable. I would like "A dot B", but even using ipython
I can only get as close as "dot A, B"
 
>>>Dan Farina <nntp.20.drfarina@recursor.net> 10/18/05 1:33 pm >>>
David Pokorny wrote:
>Hi,
>
>Just wondering if anyone has considered macros for Python. I have one
>good use case. In "R", the statistical programming language, you can
>multiply matrices with A %*% B (A*B corresponds to pointwise
>multiplication). In Python, I have to type
>
>import Numeric
>matrixmultiply(A,B)
>
>which makes my code almost unreadable.
>
>Thanks,
>David
 
The problem here is that Python's parse trees are of non-trivial ugliness.
 
A page on the compiler.ast module:
http://docs.python.org/lib/node792.html
 
it is, in fact, perfectly possible to write yourself a pre-processor for
your particular application. You may have to fiddle with the token you
want for notation depending on how the AST fleshes out (% is used by at
least a couple of things, after all). My cursory familiarity with
python grammar suggests to me that this particular choice of token could
be a problem.
 
I would say try it and see. Keep in mind though that since Python's AST
is not a trivial matter like it is in Lisp and the like that doing
metaprogramming of this sort probably falls into the category of black
magic unless it turns out to be very trivial.
 
Another option is to define your own tiny class that will override the
__mult__ method so that you can simply do:
 
A * B
 
Which may not be what you want.
 
df

-- 
http://mail.python.org/mailman/listinfo/python-list 
Received on Mon Oct 24 01:43:31 2005