MathGroup Archive 2006

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

Search the Archive

Re: Re: will someone explain the behavior of Unevaluated in this example?

  • To: mathgroup at smc.vnet.net
  • Subject: [mg71452] Re: [mg71435] Re: will someone explain the behavior of Unevaluated in this example?
  • From: Andrzej Kozlowski <akoz at mimuw.edu.pl>
  • Date: Sun, 19 Nov 2006 01:10:08 -0500 (EST)
  • References: <acbec1a40611180027m5fb197b9hcb414978770ca4ef@mail.gmail.com> <200611180941.EAA16666@smc.vnet.net>

I don't think Unevaluated can be Blocked. For example, compare:


Block[{x,Unevaluated=U},Unevaluated[x]]

x

with


Block[{x, Hold = U, ReleaseHold}, ReleaseHold[Hold[x]]]

U[x]


The reason is that the Unevaluated is removed before the entire  
expression (with Head Block) is evaluated, so Block has completely no  
effect.  You can see it even more clearly here:


Block[{x, Unevaluated = U}, Unevaluated[Unevaluated[x]]]


U[x]


The outer Unevaluated was removed before Block was evaluated, then  
during evaluation of Block the inner Unevaluated was replaced with U.

Andrzej Kozlowski








On 18 Nov 2006, at 18:41, Chris Chiasson wrote:

> this expression should, imho, produce an error or False
>
> Block[{names,Unevaluated},Unevaluated[names["1","0"]]===names 
> ["1","0"]]
>
> but it produces True
>
> On 11/18/06, Chris Chiasson <chris at chiasson.name> wrote:
>> sorry, that second one should be:
>>
>> Block[{q = 5, f, g}, {Module[{f =
>>     Unevaluated[q], g}, g =
>>       Block[{Unevaluated}, First@f]; f === g], Unevaluated[q] === q}]
>>
>> (and it still produces {False, False})
>>
>> also, I have a similar expression in some code, and a TracePrint  
>> on it
>> contains this:
>>
>> Unevaluated[names["1", "0"]] === names["1", "0"]
>>
>> with the _next line_ saying False
>>
>> (even though Unevaluated and SameQ aren't Blocked and names isn't
>> Blocked, but doesn't have a value) (afaik)
>>
>> On 11/18/06, Chris Chiasson <chris at chiasson.name> wrote:
>>> Block[{q = 5, f, g}, {Module[{f =
>>>     Unevaluated[q], g}, g = Evaluate@f; f === g], Unevaluated[q]  
>>> === q}]
>>>
>>> gives {True,False}, which is unexpected (by myself)
>>>
>>> Block[{q = 5, f, g}, {Module[{f = Unevaluated[q], g},
>>>     g = Block[{Unevaluated}, f]; f === g], Unevaluated[q] === q}]
>>>
>>> gives {False,False}, as expected
>>>
>>> --
>>> http://chris.chiasson.name/
>>>
>>
>>
>> --
>> http://chris.chiasson.name/
>>
>
>
> -- 
> http://chris.chiasson.name/
>


  • Prev by Date: a (serious) question about character codes in Mathematica
  • Next by Date: Re: NIntegrate
  • Previous by thread: Re: will someone explain the behavior of Unevaluated in this example?
  • Next by thread: Re: will someone explain the behavior of Unevaluated in this example?