I don't think it's so easy, because Add has *args. Aaron Meurer
On Wed, Jul 3, 2013 at 12:13 PM, Ondřej Čertík <[email protected]> wrote: > On Wed, Jul 3, 2013 at 11:04 AM, Aaron Meurer <[email protected]> wrote: >> It's related, because currently all canonicalization happens in the >> class constructor, and it's impossible for classes to define their own >> canonicalization (i.e., what happens in the constructor) due to lack >> of dispatch. > > That's right. So if we implement multiple dispatch, which btw can be > implemented really easily (though I don't know if this implementation > would be sufficient for our purposes), see e.g.: > > http://www.artima.com/weblogs/viewpost.jsp?thread=101605 > http://blog.ianbicking.org/more-on-multimethods.html > > > then > x = Symbol("x") > add(x, x) > > would call our standard Add which would do the usual simplification > like x+x -> 2*x. > But then we could implement SymbolHold as a subclass of Symbol, and then > > x = SymbolHold("x") > add(x, x) > > would dispatch (based on the argument types, which now is SymboHold > instead of Symbol) to a new class AddHold which would keep x+x as x+x. > > And we can register AddHold to be called even for argument > combinations like (Symbol, SymbolHold) > or (SymbolHold, Symbol), so if you do: > > x = SymbolHold("x") > x2 = Symbol("x") > add(x, x2) > > it would still keep it as x+x. > > I think this could really work well. > > Ondrej > > -- > 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. > For more options, visit https://groups.google.com/groups/opt_out. > > -- 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. For more options, visit https://groups.google.com/groups/opt_out.
