MathGroup Archive 2012

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

Search the Archive

Re: evaluate to True?

  • To: mathgroup at smc.vnet.net
  • Subject: [mg125940] Re: evaluate to True?
  • From: Andrzej Kozlowski <akozlowski at gmail.com>
  • Date: Sun, 8 Apr 2012 04:16:21 -0400 (EDT)
  • Delivered-to: l-mathgroup@mail-archive0.wolfram.com
  • References: <201204061001.GAA23045@smc.vnet.net> <CAEtRDSfexgBvoLTpXVPv=6B7m_CsNwqhUAWQBvnj4JMimsN-Sg@mail.gmail.com> <201204070959.FAA01206@smc.vnet.net>

Of course there is already a function called "MatchQ". Second, MemberQ 
can actually be used for "literal" selection of the kind you seem to be 
thinking about.

For example:

MemberQ[{0, 1, 2}, expr_]

True

but

MemberQ[{0, 1, 2}, Verbatim[expr_]]

False

MemberQ[{0, 1, expr_}, Verbatim[expr_]]

True

Thus we can define a "literal" membership checking function as follows:

LiteralMemberQ[expr_, form_] := MemberQ[expr, Verbatim[form]]

Now it behaves the way you expected:

LiteralMemberQ[{0, 1, 2}, 2]

True

LiteralMemberQ[{0, 1, 2}, expr_]

False

and even:

LiteralMemberQ[{0, 1, expr_}, expr_]

True

Andrzej Kozlowski


On 7 Apr 2012, at 11:59, Christoph Lhotka wrote:

> Hello,
>
> yes you are right, I mean MemberQ rather than ModuleQ (please see my
> correction of the post [mg125913]).
>
> In fact the behaviour is consistent with the information you get for
> MemberQ:
>
> In[1]:= ?MemberQ
>
> "MemberQ[list, form] returns True if an element of list matches form,
> and False otherwise."
>
> In fact the function name is misleading (at least to me): form is never
> a member of list if MemberQ
> returns True. If this would be the case my argumentation (below,
> original post) would bring the
> behaviour of the function in troubles if form is the "expression for
> everything".
>
> The misinterpretation of the function due to the name can be the cause
> of severe bugs as seen
> in message [mg125911]. Maybe a name like MatchQ would be more
> appropriate for future versions
> of Mathematica.
>
> Best,
>
> Christoph
>
>
>
>
> On 04/06/2012 02:38 PM, Bob Hanlon wrote:
>> You mean MemberQ rather than ModuleQ.  In MemberQ[list, expr_] a blank
>> (with or without a name for the blank) matches anything.
>>
>> {MemberQ[{a}, _],
>>  MemberQ[{"a"}, _],
>>  MemberQ[{Indeterminate}, _],
>>  MemberQ[{ComplexInfinity}, _],
>>  MemberQ[{Plot[x, {x, 0, 1}]}, _]}
>>
>> {True, True, True, True, True}
>>
>>
>> Bob Hanlon
>>
>> On Fri, Apr 6, 2012 at 6:01 AM, Christoph Lhotka
>> <christoph.lhotka at fundp.ac.be>  wrote:
>>> Hello,
>>>
>>> I found and interesting subject of discussion in the post
>>>
>>> "Bug in pattern test, or I did something wrong?"
>>>
>>>
>>> I could trace back the problem to an issue with ModuleQ.
>>>
>>> Question: Why does
>>>
>>> In[12]:= ModuleQ[{0,1,2},expr_]
>>>
>>> Out[12]:= True
>>>
>>> evaluate to True?
>>>
>>>
>>> My argumentation is as follows:
>>>
>>> On the one hand there could be a chance that expr_ is 0,1 or 2 but on
>>> the other
>>> hand the probability that expr_ is not 0,1 or 2 is even higher. As a
>>> conclusion it should neither
>>> evaluate to True nor to False.
>>>
>>> In other words: Is there any reason why the expression of everything
>>> (named expr)
>>> is contained in the set {0,1,2} ?
>>>
>>> Best,
>>>
>>> Christoph
>>>
>>
>>
>
>




  • Prev by Date: Re: fyi, small note on using Mathematica for object
  • Next by Date: Re: fyi, small note on using Mathematica for object
  • Previous by thread: Re: evaluate to True?
  • Next by thread: Re: evaluate to True?