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: Pattern Matching

  • To: mathgroup at smc.vnet.net
  • Subject: [mg58240] Re: [mg58215] Pattern Matching
  • From: Daniel Lichtblau <danl at wolfram.com>
  • Date: Fri, 24 Jun 2005 02:49:59 -0400 (EDT)
  • References: <200506230933.FAA16322@smc.vnet.net>
  • Sender: owner-wri-mathgroup at wolfram.com

Jeff wrote:
> Given a list of numbers, t = {0, -1, 0, -1, -2, -3, -4,-3,-4,-5}, I
> would like to extract those numbers that are less than or equal to the
> starting value by, for example, at least 2, but once the first (and
> each subsequent) match is found, I would the starting value to drop by
> 2.  So for the list t, the output would be {-2, -4}.
> 
> I can use Cases or map using If[ ] on the list to extract those
> elements that are less than or equal to -2, but I'm having difficutly
> in figuring out how to change the starting value to be applied to
> subsequent elements of the list.
> 
> Given my example, I could just extract all the multiples of 2 in the
> list, but I would like the starting value to change by a fixed
> percentage or combination of fixed number and percentage.
> 
> Thanks,
> Jeff

One way is to write a function that will alter arguments, and use it in 
the selection predicate.

t = {0, -1, 0, -1, -2, -3, -4,-3,-4,-5}

SetAttributes[f,HoldFirst]
f[s_,x_,diff_:-2] := If [x<=s+diff, s+=diff; True, False]

s = First[t];

In[15]:= Select[Rest[t], f[s,#]&]
Out[15]= {-2, -4}


Daniel Lichtblau
Wolfram Research


  • Prev by Date: Re: Simplify and Memory
  • Next by Date: Re: Simplify and Memory
  • Previous by thread: Pattern Matching
  • Next by thread: Re: Pattern Matching