Mathematica 9 is now available
Services & Resources / Wolfram Forums
-----
 /
MathGroup Archive
2005
*January
*February
*March
*April
*May
*June
*July
*August
*September
*October
*November
*December
*Archive Index
*Ask about this page
*Print this page
*Give us feedback
*Sign up for the Wolfram Insider

MathGroup Archive 2005

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

Search the Archive

Re: Cases and Nonatomic expression

  • To: mathgroup at smc.vnet.net
  • Subject: [mg56732] Re: Cases and Nonatomic expression
  • From: dh <dh at metrohm.ch>
  • Date: Thu, 5 May 2005 06:01:15 -0400 (EDT)
  • References: <d59lfg$6i6$1@smc.vnet.net>
  • Sender: owner-wri-mathgroup at wolfram.com

Hi Swati,
Do not use symbols m1,m2.. but function values: m[1],m[2].., this makes 
automation easier.
Further, you want a side effect, therefore, use Scan not Map.
If every m[n] would receive at most 1 sublist we could write:

Scan[(m[ First[#] ]=#)&,k]

If there are more than one sublist, we must take care of the case where 
m[n] is empty. We can do this be defining that if m[n] is not defined we 
return the empty list: m[_] = {}. As a precation we first clear m:

Clear[m];
m[_] = {};
Scan[(AppendTo[m[First[#]], #]) &, k]

This will do the trick.
Sincerely, Daniel


will do the trick.
Swati Shah wrote:
> Hi Everyone
> 
> I have a list
> k = {{1,1,2,2,3}, {1,2,2,2,3}, {2,3,3,3,3}, {5,2,2,2,1}, {6,1,1,1,1},
> {6,1,1,1,1}}
> 
> If the first element of the sublist is 1 I want to append the sublist to
> g1, if it starts with 2 then append g2 or starts with 6 then append to g6
> 
> I used cases and did the following:
> m1 = Cases[k, {1, __}];
> m2 = Cases[k, {2, __}];
> m3 = Cases[k, {3, __}];
> m4 = Cases[k, {4, __}];
> m5 = Cases[k, {5, __}];
> m6 = Cases[k, {6, __}];
> 
> However, instead of typing each one of these lines separately, it
> would be nice to use just a simple Map or something or a for loop (as
> I have more than 50 different start values)
> 
> I tried the following 2 ways:
> 
> a) using a for loopFor [i = 1, i < 7, 
>   t = "g" <> ToString [i];
>   Print [t];
>   t = Cases [k, {i, __}];
>   Print [t]
>     i++]
> 
> However outside the for loop the values of g1..g6 is empty.
> 
> b) I tried using MAP (in the similar way as the for)
> 
> But I get the following error:
> Append::normal: Nonatomic expression expected at position 1 in Append[g1,{1, \
> 168, 0.695873, 6.54462, 62.4578, 82.5056}]
> 
> 
> Any suggestions as to how I can get this working?
> 
> Thanks in advance
> 
> Swati
> 


  • Prev by Date: Re: named pattern variable scoped as global, should be local
  • Next by Date: Re: Re: Slow performance on OS X?
  • Previous by thread: Re: Cases and Nonatomic expression
  • Next by thread: Re: Cases and Nonatomic expression