Hi! On Tue, Jun 26, 2001 at 03:00:42PM +0200, Stefan Weinzierl wrote:
You say, that all terms of a sum must be of the same type, so that would involve to define a unit element in the algebra called for example "ONE" and write
( ONE + A ) * B
instead.
This is how it is intended to be used (and also algebraically most correct).
But in this case I would think it's better if
( 1 + A ) * B
throws an exception instead of just returning A*B.
Maybe add::eval() should throw an exception as soon as it encounters a constant numeric term and a noncommutative object. This would be easy to implement. However, it gets worse when someone writes something like ( m + A ) * B instead of ( m*ONE + A ) * B where "m" is a symbol. In this case you may get totally screwed results because the "*" could end up being a _commutative_ product (this happens if add::return_type() sees the "m" first). To track these kind of errors would require the add class to check whether all terms really are of the same commutativity class, which could cause a severe slowdown (and a totally unnecessary one for people who only use commutative algebra). So it would never be perfect... Bye, Christian -- / Coding on PowerPC and proud of it \/ http://www.uni-mainz.de/~bauec002/