Re: Symbol and Pi and expressions evaluating to Pi

*To*: mathgroup at smc.vnet.net*Subject*: [mg70143] Re: Symbol and Pi and expressions evaluating to Pi*From*: albert <awnl at arcor.de>*Date*: Thu, 5 Oct 2006 03:32:56 -0400 (EDT)*References*: <eg0286$818$1@smc.vnet.net>

David Bakin wrote: > [I apologize if this question has been asked - as it surely must have > been already - my searches didn't get me to the answer in the > archives. You can send me some better search terms and I'll be happy > with that as an answer, thanks!] questions like this are indeed asked every now and then, the key to a better understanding is to read the mathematica book section 2.5 'The evaluation of expressions'. > The Mathematica 5.1 help browser entry for Symbol under "Further Examples" > defines a function SymbolQ1 to determine if something is a Symbol as > follows: > > Attributes[SymbolQ1] = {HoldAllComplete}; Note the attribute HoldAllComplete of SymbolQ1, it is the explanation for your question... > SymbolQ1[expr_] := AtomQ@Unevaluated[expr] && > Head@Unevaluated[expr]===Symbol > > Then it shows the following: > > In:= SymbolQ[Pi] > Out= True > In:= {a definite integral evaluating to Pi} == Pi > Out= True > In:= SymbolQ[that definite integral] > Out= False > > Yet FullForm[Pi] is the same as FullForm[that definite integral], and is > Pi. FullForm does not have any of the Hold-Attributes, so before it will show the full form of its arguments, it will evaluate them, and if the definite integral happens to evaluate to Pi, this is what is returned. > So I have two questions: > 1) Why isn't SymbolQ[that definite integral] == True? What is it if > it isn't a Symbol? due to the HoldAllComplete-Attribute and the explicit wrapping with Unevaluated, the definite Integral is not evaluated before AtomQ looks at it, and since it is an expression AtomQ will return False. You might gain some understanding when evaluating the following lines: Integrate[x,{x,0,1}] Unevaluated[Integrate[x,{x,0,1}]] Print[Integrate[x,{x,0,1}]] Print[Unevaluated[Integrate[x,{x,0,1}]]] AtomQ[Integrate[x,{x,0,1}]] AtomQ[Unevaluated[Integrate[x,{x,0,1}]]] Note, that Unevaluated also has the Attribute HoldAllComplete! > 2) Why are FullForm[Pi] and FullForm[that definite integral] different? the result of both are the same in your case, but FullForm[that definite integral] will first evaluate the integral to find the result Pi. You can look at what happens with e.g. TracePrint[ FullForm[that definite integral] ] and compare that to TracePrint[ FullForm[ Pi ]] hth, albert