MathGroup Archive 2005

[Date Index] [Thread Index] [Author Index]

Search the Archive

Re: Types in Mathematica, a practical example

  • To: mathgroup at smc.vnet.net
  • Subject: [mg62820] Re: [mg62800] Types in Mathematica, a practical example
  • From: Andrzej Kozlowski <akoz at mimuw.edu.pl>
  • Date: Tue, 6 Dec 2005 00:03:16 -0500 (EST)
  • References: <200512051841.NAA21133@smc.vnet.net>
  • Sender: owner-wri-mathgroup at wolfram.com

It seems to me that you are looking here at Mathematica from the  
wrong view point. Although Mathematica is not a strict "functional"  
language, it is "functional" at least in the sense that it is  
"functions" and not "objects" that play the central role (I am being  
deliberately vague here but I have run out of patience with long  
discussions of programming languages and  general design issues.). In  
this case the issue is with the function Plus and not with the nature  
or "type" of x etc. Plus has the attribute Listable, which is  
responsible for the behaviour you see (and it does really matter if  
Mathematica assumes that x is a number or not, for the same thing  
will happen, for example,  if you use the string "x" instead of the  
symbol  x). Hence the natural way to deal with your problem is by  
temporarily blocking the Listable attribute like this:

In[10]:=
a = {{1, 2}, {3, 4}};

In[11]:=
Block[{Plus}, x - a /. x -> a]

Out[11]=
{{0, 0}, {0, 0}}

As far as I am concerned this works just as I would wish and I see no  
benefit in adding any kind of "types" to deal with this sort of  
problems.

Andrzej Kozlowski



On 6 Dec 2005, at 03:41, 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
>
>


  • Prev by Date: Re: Types in Mathematica, a practical example
  • Next by Date: Re: Types in Mathematica, a practical example
  • Previous by thread: Re: Types in Mathematica, a practical example
  • Next by thread: Re: Re: Types in Mathematica, a practical example