Re: EUREKA Re: Types in Mathematica, a practical example

*To*: mathgroup at smc.vnet.net*Subject*: [mg63190] Re: EUREKA Re: [mg62800] Types in Mathematica, a practical example*From*: Andrzej Kozlowski <akoz at mimuw.edu.pl>*Date*: Sat, 17 Dec 2005 03:46:26 -0500 (EST)*References*: <43A1787000069CF6@pne-smtpout2-sn2.hy.skanova.net> (added by postmaster@pne.skanova.net) <DB6CBF61-D563-47BF-B707-FEFA7B843E06@mimuw.edu.pl>*Sender*: owner-wri-mathgroup at wolfram.com

If you feel really want do it in this sor of way, I suggest the following approach: x=Array[Unique[x]&,{2,2}] {{x$23,x$24},{x$25,x$26}} etc. I think in this way you get all the benefits of your approach without all the problems that will result from using HoldForm. (Somebody might have suggested this already; I have not followed all the suggestions carefully since I do not myself feel any need for a solution to this problem.) Andrzej Kozlowski On 17 Dec 2005, at 08:16, Andrzej Kozlowski wrote: > > On 17 Dec 2005, at 02:26, Ingolf Dahl wrote: > >> >> >> My suggestion to define a 2x2 list of undefined elements is the >> following: >> >> x = {{HoldForm[x[[1,1]]], HoldForm[x[[1,2]]]}, {HoldForm[x[[2,1]]], >> HoldForm[x[[2,2]]]}}; > > You really do love this typing business ;-) Why not: > > > In[1]:= > x = Array[HoldForm[x[[##1]]] & , > {2, 2}] > > Out[1]= > {{HoldForm[x[[1,1]]], > HoldForm[x[[1,2]]]}, > {HoldForm[x[[2,1]]], > HoldForm[x[[2,2]]]}} > >> >> Occasionally, when you have defined some of the undefined >> elements, you may >> convert to Input Form or have to apply ReleaseHold or >> ReplaceAll[#,HoldForm[Part[a__]]:>Part[a]]& @ to get rid of the >> invisible >> HoldForm surrounding the indexed elements. For Set and SetDelayed >> you can >> get this automatically by the command > > Hm... have you really tried it: > > > > ReplaceAll[#,HoldForm[Part[a__]]:>Part[a]]& @x > > > {{HoldForm[x[[1,1]]], > HoldForm[x[[1,2]]]}, > {3, HoldForm[x[[2,2]]]}} > > >> >> Unprotect[HoldForm]; HoldForm /: Set[ HoldForm[ Part[a__]],b_]:= Set[ >> Part[a],b]; HoldForm /: SetDelayed[ HoldForm[ Part[a__]],b_]:= >> SetDelayed[ >> Part[a],b]; >> Protect[HoldForm]; > > Since I consider redefining basic built in functions as > "unnecessary evil" I will stop at this. Personally I just can't see > any point in all of this but of course this is just a personal > opinion. Those who like or imagine it could be useful it can pursue > this further. However, there is just one more thing to deal with: > > > >> ___________________________________________________________ >> When I played with this, I came across the following: >> >> Assume, that the value of axxx is not defined. Then >> >> Hold[Part[axxx, 57, 62]] /. {axxx -> b} >> >> returns >> >> Hold[b[[57,62]]] >> >> but if we first assign any value to axxx, e.g. Indeterminate, we >> instead >> obtain >> >> Hold[axxx[[57,62]]] >> >> Can someone explain? > > This is pretty obvious and I am sure you can explain it yourself. > However, since you asked .. > > If aaax has the value Intermediate then in > > ReplaceAll[Hold[Part[axxx, 57, 62]], {Rule[axxx, b]}] > > the second argument evaluates to Intermediate->b, so all you are > doing is evaluating: > > Hold[Part[axxx, 57, 62]] /. {Intermediate -> b} > > Use instead > > > Hold[axxx[[57,62]]] /. > {HoldPattern[axxx] -> b} > > > Hold[b[[57,62]]] > > > > >> >> And I wish everybody A Merry Christmas and A Happy New Year! >> > > I fully agree with this! > > Andrzej Kozlowski