Re: Types in Mathematica, a practical example

*To*: mathgroup at smc.vnet.net*Subject*: [mg62819] Re: [mg62800] Types in Mathematica, a practical example*From*: Pratik Desai <pdesai1 at umbc.edu>*Date*: Tue, 6 Dec 2005 00:03:15 -0500 (EST)*References*: <200512051841.NAA21133@smc.vnet.net>*Sender*: owner-wri-mathgroup at wolfram.com

Ingolf Dahl wrote: >To MathGroup, > >I am not an advocate for strong typing in Mathematica, but consider the >following simple example: I want to see if two matrices are equal. One of >them was the result from some equation, and is given inside a rule. Then I >write some code similar to this: > > > >a = {{1, 2}, {3, 4}}; > >x - a /. {x -> a} > > > >I of course hope to get a matrix filled by zeroes, but if x is undefined, >the following is returned: > > > >{{{{0, 1}, {2, 3}}, {{-1, 0}, {1, 2}}}, {{{-2, -1}, {0, 1}}, {{-3, -2}, {-1, >0}}}} > > > >First x was assumed to be a number, and (x - a) was evaluated. Then x was >substituted by the matrix a. No bug in Mathematica, but it was not what I >wanted as user. It is easy to make such a mistake in the programming. Of >course there are many ways to get around this problem, but is there any >reasonably simple way to "type" x to be a list of lists without specifying >the elements, in such a way that the above example works? > > > >I could do > > > >ReleaseHold[Hold[x - a] /. {x -> a}] > > > >but then we are not in the "typing business" any longer. > > > >I think this question illuminates one aspect of the typing issue in >Mathematica. I remember that I as a newbie looked for ways to declare >matrices, in such a way that I later could specify matrix elements >one-by-one, without initializing them first. I soon learned that there are >other ways to achieve similar results, but still I do not see any good >reason why I cannot force Mathematica to give the following response from >x-a, if x in some way is declared to be a 2x2 list of lists: > > > >{{x[[1,1]] - 1, x[[1,2]] - 2},{x[[2,1]] - 3, x[[2,2]] - 4}} > > > >I am not allowed to Unset or Clear any part of a list either. Why not? > > > >Ingolf Dahl > >Sweden > > > > Hi Ingolf Perhaps I am missing the point, and after reading some of the posts in this thread I am not really sure what type actually means. Nevertheless based on the definition http://mathworld.wolfram.com/MatrixEquality.html Why not write a function such as this?? MatEQ[m_?MatrixQ, n_?MatrixQ] := (Flatten[m] === Flatten[n])

**References**:**Types in Mathematica, a practical example***From:*"Ingolf Dahl" <ingolf.dahl@telia.com>