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) with expr.has(varidx(wild(1), 4)) for example. But I see your point. Changing idx::match_same_type() by inserting 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 ... Regards, Jens