Hygenic Macros

Alex Stapleton alexs at advfn.com
Tue Oct 18 08:21:40 EDT 2005


I seem to remember a rather ugly hack at some point in the past that  
created a new "operator" like so

A |dot| B

where dot was an object which had the OR operator for left and right  
arguments redefined seperately so that it only made sense when used  
in that syntax.

I guess you could hack something together along the same lines. I  
just wish I could remember what it was called, it's on the  
ActiveState Cookbook somewhere.

On 18 Oct 2005, at 13:17, Adriaan Renting wrote:

> 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 at 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
>
> -- 
> http://mail.python.org/mailman/listinfo/python-list
>




More information about the Python-list mailing list