Re: extra data in expressions

*To*: mathgroup at smc.vnet.net*Subject*: [mg53390] Re: [mg53367] extra data in expressions*From*: Andrzej Kozlowski <akoz at mimuw.edu.pl>*Date*: Sun, 9 Jan 2005 23:03:41 -0500 (EST)*References*: <200501080739.CAA17766@smc.vnet.net>*Sender*: owner-wri-mathgroup at wolfram.com

On 8 Jan 2005, at 08:39, joshuahorowitz at comcast.net wrote: > Here's a rather abstract foundations question: > > I once unthinkingly assumed that an expression was determined by its > head and parts. This is of course very wrong: any two expressions with > head Real, no matter how different, have head Real and no parts. Same > goes for Symbol, Integer, String, and all other "atomic" expression > heads. This means that certain expressions can (and must) hold hidden > extra data. Well, not necessarily. Things like 2 or "dog" are atoms: AtomQ/@{2,"dog"} {True,True} and Heads of atoms are basically just type specifications, and quite different form heads of non-atoms. IN particular, head's of atoms can't be changed so String @@ 1 does completely nothing, which explains why Head[String @@ 1] returns Integer. Note also that contrary to most people's expectations: AtomQ[Complex[2,3]] True so List @@ (Complex[2, 3]) 2 + 3*I has no effect. Andrzej Kozlowski > > My question is whether there are any consistent, logical semantics for > this extra data. Can an expression contain both parts AND extra data? > Which built-in symbols (or rather, expressions with head one of these > built-in symbols) contain extra data; is there a list somewhere? Can > user-defined symbols contain user-defined extra data? Why does > Head[String @@ 1] return Integer? What else could it possibly return? > > I'm starting to suspect that "everything is an expression" involves > some pretty ugly exceptions. >

**References**:**extra data in expressions***From:*joshuahorowitz@comcast.net