[GiNaC-list] Two remarks.

Jens Vollinga vollinga at thep.physik.uni-mainz.de
Wed Apr 20 20:41:12 CEST 2005

Hi Chris,

On Tue, Mar 22, 2005 at 05:31:35PM +0100, Chris Dams wrote:
> (2) Could somebody explain why there is a non-trivial method
> idx::match_same_type? This method makes it impossible to match
> varidx(mu,4-delta) using the pattern varidx(wild(1),wild(2)), which could
> be useful sometimes.

the existence of this method makes sense to me, because you don't want
to match

    varidx mu(symbol("mu"), 4-D)


    expr.has(varidx(wild(1), 4))

for example. But I see your point. Changing idx::match_same_type() by

   if (is_a<wildcard>(dim) || is_a<wildcard>(o.dim)) {
       return true;

before the 'return' statement would give the desired behavior. Then you
could match with

    expr.has(varidx(wild(1), wild(2)))

for example. But this is probably just a dirty hack, because you could
also match with 
    expr.has(varidx(wild(1), wild(1)))

which shouldn't happen.

The problem, I think, lies with the design of the wildcard mechanism,
but I don't know how to improve it right now.

Another (not directly connected) example for what I mean: things like

    expr.subs(MyFunc(wild(1),wild(2)) == delta_tensor(wild(1), wild(2)))

don't work, because 'delta_tensor' checks the arguments to be of class
'idx' and since 'delta_tensor' is an ordinary C++ function with no way
to hold back the evaluation ...


More information about the GiNaC-list mailing list