Services & Resources / Wolfram Forums / MathGroup Archive
-----

MathGroup Archive 2011

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

Search the Archive

Re: Difficulty with patterns

  • To: mathgroup at smc.vnet.net
  • Subject: [mg122315] Re: Difficulty with patterns
  • From: A Retey <awnl at gmx-topmail.de>
  • Date: Tue, 25 Oct 2011 06:15:44 -0400 (EDT)
  • Delivered-to: l-mathgroup@mail-archive0.wolfram.com
  • References: <j80qbl$ae1$1@smc.vnet.net>

Hi,

> I have recently become increasingly uncomfortable with my areas of
> ignorance with Mathematica.  The Virtual conference has some really
> cool demos.  In one, a website is read in and a table of data
> extracted.  Without patterns, it would have been very difficult.
> Need a little help with an example.
>
> Example 1 uses my old standby, the Table[] function.  Works fine.  I
> am attempting to get better with patterns, so I tried example 2 and
> 3.  They work, but gives several errors about use of stringjoin
> needing strings.  What am I doing wrong?
>
> Error: StringJoin::string: String expected at position 1 in
> StringJoin[n].
>
> (* Load string from WolframAlpha  *) m
> WolframAlpha["usa",{{"LargestCities:CountryData",1},"ComputableData"},
>PodStates->
 > {"LargestCities:CountryData__More","LargestCities:CountryData__More"}
 > ];
>
> (* example 1 *) mNew=Flatten[m,1]; mNew=Drop[mNew,1];
> mNew=Drop[mNew,-1]; mNew=Table[{i[[1,1]]<>  i[[1,2]]<>  i[[1,2]]
> ,i[[2]]},{i,mNew}]; Grid[mNew,Frame->All]
>
> (* example 2 *) Clear[n,o,p,q]; mNew=Cases[m,
> {{n_String,o_String,p_String},q_} ->  { n<>   ", "<>  o<>  ", "<>
> p,q},Infinity ]; Grid[mNew,Frame->All]
>
> (* example 3 *) Clear[n,o,p,q]; mNew=Cases[m, {{n_,o_,p_},q_} ->  { n
> ,  ", ", o  , ", ", p,q},Infinity ]; mNew = mNew /. {n___,q_Integer}
> ->  {StringJoin[n],q}; Grid[mNew,Frame->All]
>
> I even tried, mNew = Flatten[m, 1]; mNew = Drop[mNew, 1]; mNew =
> Drop[mNew, -1]; mNew = Table[{Head[i[[1, 1]]], Head[i[[1, 2]]], Head[
> i[[1, 2]]] , i[[2]]}, {i, mNew}]; (*mNew=Table[{i[[1,1]]<>
> i[[1,2]]<>  i[[1,2]] ,i[[2]]},{i,mNew}];*) Grid[mNew, Frame ->  All]
>
> They are all strings!

that's not the problem, also you problem is not with patterns but with 
evaluation: when using -> (Rule) the RHS is evaluated before the pattern 
matching actually is started. The error message comes from 
string-joining the symbols n,o, and p. You want the RHS only to be 
evaluated when the pattern matches, so you will need RuleDelayed (:>) 
and all is good, e.g. for example 2:

Clear[n, o, p, q];
mNew = Cases[
    m, {{n_String, o_String, p_String},
      q_} :> {n <> ", " <> o <> ", " <> p, q}, Infinity];
Grid[mNew, Frame -> All]

hth,

albert



  • Prev by Date: still struggling about integration
  • Next by Date: Re: runs slowly?
  • Previous by thread: Re: Difficulty with patterns
  • Next by thread: Parameter Fitting in coupled differential equation