Re: Re: OneIdentity
- To: mathgroup at smc.vnet.net
- Subject: [mg103531] Re: [mg103515] Re: OneIdentity
- From: DrMajorBob <btreat1 at austin.rr.com>
- Date: Sun, 27 Sep 2009 07:30:23 -0400 (EDT)
- References: <200909240352.XAA13458@smc.vnet.net> <h9fmfl$sgh$1@smc.vnet.net>
- Reply-to: drmajorbob at yahoo.com
And so it remains, as always, clear as mud. But sometimes useful. Bobby On Sat, 26 Sep 2009 05:12:31 -0500, Mariano Suárez-Alvarez <mariano.suarezalvarez at gmail.com> wrote: > On Sep 25, 8:51 am, Andrzej Kozlowski <a... at mimuw.edu.pl> wrote: >> On 25 Sep 2009, at 18:57, Chris Osborn wrote: >> >> >> >> > On Sep 24, 6:51 am, Andrzej Kozlowski <a... at mimuw.edu.pl> wrote: >> >> The reason is that OneIdentity does not actually mean what the >> >> documentation seems to imply. What it does exactly would take too >> >> long >> >> to explain and it has been already done a number of times on this >> >> forum . Here is a very brief and basic "explanation" with two >> >> examples >> >> (if you search the archives for Flat, OneIdentity adding perhaps the >> >> names Allan Hayes or Hartmut Wolf you will find a lot more on this >> >> topic). >> >> >> When used alone, without the Flat attribute, it is only significant = > >> >> in >> >> connection with Default values. Here is an example. >> >> >> Remove[plus]; >> >> MatchQ[1, plus[_ : 0]] >> >> >> False >> >> >> Remove[plus]; >> >> SetAttributes[plus, {OneIdentity}]; >> >> MatchQ[1, plus[_ : 0]] >> >> >> True >> >> >> When used together with the attribute Flat it has a rather different >> >> significance: >> >> >> Remove[f] >> >> SetAttributes[f, Flat]; >> >> MatchQ[f["a", "b", "c", "d"], f[__, _String, __]] >> >> >> False >> >> >> but >> >> >> Remove[f] >> >> SetAttributes[f, {Flat, OneIdentity}]; >> >> MatchQ[f["a", "b", "c", "d"], f[__, _String, __]] >> >> >> True >> >> >> The reason why the first match did not work is that an additional f >> >> was wrapped around the arguments. Having the OneIdentity attribute >> >> prevents this form happening. >> >> >> Andrzej Kozlowski >> >> >> On 24 Sep 2009, at 12:52, Chris Osborn wrote: >> >> >>> I do not understand why I get "False" instead of "True" here: >> >> >>> In[773]:= ClearAll[key]; >> >>> SetAttributes[key, OneIdentity]; >> >> >>> MatchQ[13, key[_]] >> >> >>> Out[775]= False >> >> >>> According to the docs: >> >> >>> OneIdentity >> >>> is an attribute that can be assigned to a symbol f to indicate >> >>> that f >> >>> [x], f[f[x]], etc. are all equivalent to x for the purpose of >> >>> pattern >> >>> matching. >> >> >>> Thanks in advance, >> >>> Chris >> >> > Thanks Andrzej, >> >> > Your post is helpful. I find the following behavior amusing: >> >> > In[1438]:= MatchQ[monkeyfish[turtle], Plus[_ : car]] >> >> > Out[1438]= True >> >> > Where none of my cute symbols have any defs associated with them. >> >> > I indeed searched for OneIdentity before I posted my questions, but >> > for some reason 0 results were returned. >> > Now when I do a search, I get this one thread back. >> >> > Thanks, >> > Chris >> >> How about this: >> >> http://forums.wolfram.com/mathgroup/archive/2000/Jan/msg00202.html >> >> this >> >> http://forums.wolfram.com/mathgroup/archive/2000/Jan/msg00254.html >> >> this >> >> http://forums.wolfram.com/mathgroup/archive/2000/Jan/msg00207.html >> >> and quite a few others in these and other threads ? > > The search facility in Google Groups has been having issues lately... > > -- m > -- DrMajorBob at yahoo.com
- References:
- OneIdentity
- From: Chris Osborn <chrisosb@gmail.com>
- OneIdentity