Re: Re: OneIdentity
- To: mathgroup at smc.vnet.net
- Subject: [mg103508] Re: [mg103498] Re: OneIdentity
- From: Andrzej Kozlowski <akoz at mimuw.edu.pl>
- Date: Fri, 25 Sep 2009 07:51:56 -0400 (EDT)
- References: <200909240352.XAA13458@smc.vnet.net> <h9fmfl$sgh$1@smc.vnet.net> <200909250957.FAA09602@smc.vnet.net>
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 ?
Andrzej Kozlowski
- References:
- OneIdentity
- From: Chris Osborn <chrisosb@gmail.com>
- Re: OneIdentity
- From: Chris Osborn <chrisosb@gmail.com>
- OneIdentity