MathGroup Archive 2005

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

Search the Archive

Re: Re: Re: Threading 'Append'


On 7 Dec 2005, at 13:10, Pratik Desai wrote:

> Andrzej Kozlowski wrote:
>
>> On 6 Dec 2005, at 03:40, J Siehler wrote:
>>
>>
>>
>>> If I run
>>>
>>> Thread[Append[{{1,2},{3,4},{5,6}},{a,b,c}]]
>>>
>>> I would expect to get
>>>
>>> {{1,2,a},{3,4,b},{5,6,c}}
>>>
>>> but in fact I get an 'Objects of unequal length' error.
>>>
>>> On the other hand,
>>>
>>> Thread[foo[{{1,2},{3,4},{5,6}},{a,b,c}]]
>>> %/.foo->Append
>>>
>>> gives what I wanted.  Can someone explain what's going on?
>>>
>>>
>>>
>>
>> All you need to do is:
>>
>> In[9]:=
>> Thread[Unevaluated[Append[{{1, 2}, {3, 4}, {5, 6}},
>>     {a, b, c}]]]
>>
>> Out[9]=
>> {{1, 2, a}, {3, 4, b}, {5, 6, c}}
>>
>>
>> The name of the function "Unevaluated" should make it self evident
>> what happened here (I hope).
>>
>>
> Actually it is not. Can you please elaborate
>
> Pratik
>


Actually, I meant that what was self evident was that the problem was  
because Append[.....] was *evaluated*. The actual mechanism of  
Unevaluated is quite tricky. Basically it is first stripped off and  
then the code beginning with Append is passed unevaluated to Thread.  
Then Appended is threaded as desired. After than the "evaluator" once  
again looks at the expression to see if it had undergone a change.  
Since it did, it does not put back the head Unevaluated.

So much in theory, and it actually works here exactly as advertised.  
But there are cases when it works in a much more complicated way.

Andrzej Kozlowski


  • Prev by Date: Re: Bug in Graphics output of Circle primitive?
  • Next by Date: Re: Types in Mathematica
  • Previous by thread: Re: Re: Threading 'Append'
  • Next by thread: Re: Threading 'Append'