Re: Bug with Sequence and Assignment by Part...

*To*: mathgroup at smc.vnet.net*Subject*: [mg121713] Re: Bug with Sequence and Assignment by Part...*From*: Richard Fateman <fateman at cs.berkeley.edu>*Date*: Mon, 26 Sep 2011 20:06:45 -0400 (EDT)*Delivered-to*: l-mathgroup@mail-archive0.wolfram.com*References*: <j5f6ai$q8a$1@smc.vnet.net> <201109250942.FAA29324@smc.vnet.net> <j5pcqu$8jc$1@smc.vnet.net>

The pronouncement that a bug is a feature is one way to cure it. It can be fixed another way. Though I have not pondered on all the examples, the simplest one by DanL seems to illustrate the problem adequately. Here is the example. s={1,2,3} s[[1]]=Sequence[4,5] ... sets s to apparently {4,5,2,3} (*) s[[2]]= aha ... sets s to apparently {4,5,aha,2,3} NOT {4,aha,2,3} which illustrates that (*) is apparently not the value of s. whereas s={1,2,3} s[[1]]=Sequence[4,5] ... sets s to apparently {4,5,2,3} (*) s = s ... only change from above, insert this s[[2]]= aha ... sets s to apparently {4,aha,2,3} note change, in last line. s is now correct. .......... Note that z=Sequence[4,5] is really the same as Set[z,4,5]. Here's a fix. Require that Set take exactly 2 arguments. In particular, that means that s[[1]]=Sequence[4,5] is ILLEGAL. Perhaps it can be converted to mean s[[1]] = List[4,5] or {4,5} ............ Will this break stuff? Only Set of items to Sequences, and the implicit set of a pattern x__. e.g. f[x__]:=x y=f[1,2,3] ... sets y to Sequence[1,2,3] Ramifications: I think that the old use of Sequence stuff= Sequence [a,b,c] is used only in this way... f[1,2,stuff,3] to simulate f[1,2,a,b,c,3]. Now consider re-writing it this way... new={a,b,c} f@@Join[{1,2},new,{3}] and if you have a pattern Sequence (e.g. stuff) you write f@@Join[{1,2},{stuff},{3}]. I suppose one could write another program, say conjoin, which would allow the following... f@@conjoin[1,2,stuff,3]. Another, more wholesale change would have f[x__]:=x return a List rather than a Sequence. in the example above, s=s would then be required -- actually, s=conjoin@@s, or something like that Presumably a change of this magnitude would result in disruption of the existing code base. On the other hand, it seems to be unacceptable to have the insertion of the command s=s change the meaning of a program. ..... Another run through this... Or I suppose a hack could be put in place forcing some kind of re-evaluation after Set[<NonAtomic>, Sequence[...]]. which was previously mentioned but thought to be too expensive... RJF On 9/26/2011 1:23 AM, DrMajorBob wrote: > Amen. > > Bobby > > On Sun, 25 Sep 2011 04:42:00 -0500, BernieTheJet<berniethejet at gmail.com> > wrote: > >> Thank you Leonid for the link, and thank you Oleksandr for pointing me >> to OwnValues, I hadn't ever used that before. >> >> So everyone's opinion seems to be that this is not a bug and that this >> construct is something of a manipulation of proper Mathematica syntax - >> something approaching a hack - because Sequence is a low-level >> function that one should understand Mathematica's evaluation sequence >> before >> using. Ok, that is fine. Certainly that is one interpretation ('when >> looked at from a certain perspective'). Certainly one can't claim >> that the use of Sequence is hidden, or in anyway indicated to be a >> 'low-level' operator by its presentation in the Help, except insofar >> as it is given a perfunctory presentation. >> >> But I think that it is just as valid to say that this 'bug' it is >> counter to one of my favourite Mathematica design philosophy which is, >> somewhat similar to Apple in this regard, to remove all the tedious >> and computer-ish work from the user's care, to take care of that >> behind the scenes, while still delivering as much of the power of the >> language as possible. So for users to have to understand Mathematica's >> evaluation sequence, SequenceHold (which I have never once used, or >> perhaps even needed), or OwnValues (ditto) in order to get logical >> behaviour from a function seems to clearly go against this >> philosophy. Of course one can counter that there is another design >> philosophy in Mathematica of mixing the best of all worlds, and never >> forcing >> oneself to strictly subscribe to any one design structure, which I >> also support. >> >> For me, I just guess that Sequence is a 'hack' that WRI implemented to >> get around the limitation that everything be a List. A 'hack' in that >> it defied their initial plan that everything be representable as >> Lists, and then a 'hack' in that they couldn't get it to work in a >> logical fashion in all subsequent interactions with other functions, >> as seen here. >> >> B >> > >

**References**:**Re: Bug with Sequence and Assignment by Part...***From:*BernieTheJet <berniethejet@gmail.com>