Concerning pattern matching and term rewriting, there is some work by 
Matthew Rocklin as separate modules (i.e. unrelated to the standard pattern 
matcher in sympy.core)

Unification:
http://matthewrocklin.com/blog/work/2012/11/01/Unification/
https://github.com/sympy/sympy/tree/master/sympy/unify

Strategies:
https://github.com/sympy/sympy/tree/master/sympy/strategies

He also wrote an independent library to all the definition of multiple 
dispatched functions in Python:
http://multiple-dispatch.readthedocs.org/en/latest/
https://github.com/mrocklin/multipledispatch

There was some discussion about including *multipledispatch* as a 
dependency in SymPy. I don't know what the conclusion was. Despite not 
being a pattern matcher, it could be very useful to define generic methods 
acting on different kinds of algebras based on Python's classes.

Currently the standard pattern matcher (the one defined in *sympy.core*) 
does not support assumptions on its wildcards, or at least whenever I tried 
them, they did not work. So if you declare



*w = Wild('w', integer=True)*matches won't be restricted to integers only, 
unfortunately. Furthermore, the pattern matcher is sensible to additive and 
multiplicative inverses, so you're expected to get a lot more matches on 
the same expression than Mathematica.


In [21]: expr = 1/(x+y)

In [22]: expr.match(x+w)
Out[22]: 
⎧          1  ⎫
⎨w: -x + ─────⎬
⎩        x + y⎭


In Mathematica *w_* matches *y* so that *x+w -> x+y*.

-- 
You received this message because you are subscribed to the Google Groups 
"sympy" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
Visit this group at http://groups.google.com/group/sympy.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/sympy/3fb2c7b3-2ffc-4b68-8db0-fa3b26c3f457%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to