Mathematica 9 is now available
Services & Resources / Wolfram Forums / MathGroup Archive
-----

MathGroup Archive 2011

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

Search the Archive

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

  • To: mathgroup at smc.vnet.net
  • Subject: [mg121628] Re: Bug with Sequence and Assignment by Part...
  • From: David Bailey <dave at removedbailey.co.uk>
  • Date: Fri, 23 Sep 2011 03:42:32 -0400 (EDT)
  • Delivered-to: l-mathgroup@mail-archive0.wolfram.com
  • References: <j5f6ai$q8a$1@smc.vnet.net>

On 22/09/2011 12:31, BernieTheJet wrote:
> If one patches a list of items into a list using Sequence[], it
> appears that Mathemaitca doesn't properly update the data structure:
>
> temp = Range[3];
> temp[[2]] = Sequence @@ {a, a, a};
> temp
>
> as expected :
>      ->  {1, a, a, a, 3}
>
> FullForm[temp]
>    also looks right:
>     ->  List[1,a,a,a,3]
>
> As does:
> Length[temp]
>     ->  5
>
> Ok, so far all is fine.  But subsequent additions to the same place do
> not increase the length of temp, as one might expect:
> temp[[2]] = Sequence @@ {b, b, b};
> temp
> FullForm[temp]
>
>         ->  {1, b, b, b, 3}
> and  ->  List[1,b,b,b,3]
>
> And, despite the Length of temp being '5', in fact there is no way to
> put anything into position '5' of temp:
>
> Length[temp]
>     ->  5
> temp[[5]] = Sequence @@ {c, c, c}
>     ->  Set::partw: Part 5 of {1,Sequence[b,b,b],3} does not exist.>>
>
> Here we finally see what is going on, somewhere temp is being stored
> as {1,Sequence[b,b,b],3}, but all the functions that go to request
> info from it first perform the evaluation of Sequence hence returning
> the expected results.
>
> One can force Mathematica to sort things out with the otherwise meaningless:
> temp=temp
>
> Surely I am not the first to encounter this, and surely it constitutes
> at least one bug, (and surely it is shouldn't be in Mathematica 8!).  I mean,
> it seems to me that FullForm and Length should also detect the
> presence of Sequence and act differently than they do here.
>
> Bernard
>
Thanks for that really fascinating example!

I must say, when I first encountered Sequence as I learned Mathematica, 
I was a bit stunned because it didn't seem to fit the style of the rest 
of the Mathematica language. I tend to feel that if Sequence does what 
you want, use it, but it will never be a completely 'normal' function!

In your example, my guess is that there is some sort of efficiency issue 
here. If updating temp[[2]] could, in effect, change the rest of the 
temp array then the performance of updates of vectors might suffer.

Overall, I am glad Mathematica does not hide all its sneaky functions!

David Bailey
http://www.dbaileyconsultancy.co.uk





  • Prev by Date: Re: Bug with Sequence and Assignment by Part...
  • Next by Date: Re: Calculus and InterpolatingFunction
  • Previous by thread: Re: Bug with Sequence and Assignment by Part...
  • Next by thread: Re: Bug with Sequence and Assignment by Part...