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 >>> >> >> > >
- References:
- Why does ModuleQ[{0,1,2}, expr_] evaluate to True?
- From: Christoph Lhotka <christoph.lhotka@fundp.ac.be>
- Re: evaluate to True?
- From: Christoph Lhotka <christoph.lhotka@fundp.ac.be>
- Why does ModuleQ[{0,1,2}, expr_] evaluate to True?