Re: Re: weird escaping problem with StringPattern inside
- To: mathgroup at smc.vnet.net
- Subject: [mg100883] Re: [mg100860] Re: weird escaping problem with StringPattern inside
- From: DrMajorBob <btreat1 at austin.rr.com>
- Date: Wed, 17 Jun 2009 04:37:21 -0400 (EDT)
- References: <h12ggp$edj$1@smc.vnet.net> <200906170152.VAA25905@smc.vnet.net>
- Reply-to: drmajorbob at bigfoot.com
When in doubt, use RuleDelayed: "a" ~~ x_ ~~ "c" :> x Bobby On Tue, 16 Jun 2009 20:52:59 -0500, dh <dh at metrohm.com> wrote: > > > Hi Roger, > > to me, the mystery is that your rule works at all. From the manual: > > > > "Symbols that occur as pattern names in lhs are treated as local to the > > rule. This is true when the symbols appear on the right-hand side of /; > > conditions in lhs, and when the symbols appear anywhere in rhs, even > > inside other scoping constructs. " > > > > The problem seems to be that Mathematica does not always localize > > pattern variables. It does it only when it thinks it necessary. > > Consider: > > Module[{pat, var = x}, > > pat = "a" ~~ x_ ~~ "c" -> x > > ] > > this gives: "a" ~~ x_ ~~ "c" -> x > > on the other hand: > > Module[{pat, var = x}, > > pat = "a" ~~ x_ ~~ "c" -> var > > ] > > gives: "a" ~~ x$_ ~~ "c" -> x > > this will not work, but it makes sense. Giving the variable name in a > > variable, it is a good guess to assume that the user does not mean the > > pattern variable. I could live with this. However, unfortunately it is > > not consistently implemented. Consider: > > var = x; > > pat = "a" ~~ x_ ~~ "c" -> var > > this gives: "a" ~~ x_ ~~ "c" -> x what is inconsistent compared to the > > foregoing. > > > > I consider this a bug. It would be better when it would work like > > described in the manual. I think you should inform Wolfram about this. > > Maybe somebody from the group has something to say about this. > > Daniel > > > > > > divisor wrote: > >> Hello MathGroup: > >> > >> I am having a strange problem where my code works fine in a Notebook > >> session but acts strangely inside a Module[]. I presume that this is > >> some scoping problem that is currently beyond me. > >> > >> I know how Module[] takes local variables and adds "$nnn" or something > >> to the variable. It is doing a similar thing to my string pattern and > >> I have no idea how to "escape" this and disable this behavior. > >> > >> Any help you can provide is greatly appreciated. > >> > >> This code works as expected: > >> > >> parseVars = {abc, def}; > >> text0 = "the rain in spain stays mainly..."; > >> parsePattern = "the " ~~ abc__ ~~ " in " ~~ def__ ~~ " stays main" -> > >> parseVars; > >> Flatten@StringCases[text0, parsePattern] > >>> {"rain", "spain"} > >> Print["patt=", parsePattern] > >>> patt=the ~~abc__~~ in ~~def__~~ stays main->{abc,def} > >> > >> > >> This is the module containing the exact same logic: > >> > >> getWeather[inputStr_String] := Module[ > >> {parseVars, parsePattern} > >> , parseVars = {abc, def}; > >> parsePattern = "the " ~~ abc__ ~~ " in " ~~ def__ ~~ " stays main" - > >>> parseVars; > >> Print["patt=", parsePattern]; > >> Flatten@StringCases[inputStr, parsePattern] > >> ] > >> > >> This shows the symptom. Notice how the pattern vars are suffixed and > >> hence do not match those in the rhs of StringCases[] with the result > >> being all are "no match"!?!?! > >> > >> getWeather[text0] > >>> patt=the ~~abc$__~~ in ~~def$__~~ stays main->{abc,def} > >>> {abc, def} > >> > >> TIA. > >> > >> Regards.. > >> > >> Roger Williams > >> Franklin Laboratory > >> > > > -- DrMajorBob at bigfoot.com
- References:
- Re: weird escaping problem with StringPattern inside Module[]
- From: dh <dh@metrohm.com>
- Re: weird escaping problem with StringPattern inside Module[]