MathGroup Archive 2007

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

Search the Archive

Re: Picking Arguments

  • To: mathgroup at smc.vnet.net
  • Subject: [mg74298] Re: Picking Arguments
  • From: "dimitris" <dimmechan at yahoo.com>
  • Date: Sat, 17 Mar 2007 02:09:51 -0500 (EST)
  • References: <esdka9$ou3$1@smc.vnet.net><et5npe$jij$1@smc.vnet.net>

Very informative post Drago!

Cheers
Dimitris


P=2ES.

Greetings from Greece!


=CF/=C7 Drago Ganic =DD=E3=F1=E1=F8=E5:
> Hi,
> I just want to add to the difference of Select and Case. I think they
> represent two important functions for a different domain of programming:
>     semantic    Select
>     syntax        Cases
>
> which sometimes can be used for the same problem but usually one method is
> better that the other for a certain problem.
>
> If you look at all the List manipulation functions we have only three acc=
ess
> methods to the elements of lists:
>     1. postion    => via an integer number, eg. Part[]
>     2. pattern    => via a syntactical pattern, eg. Cases[]
>     3. logical     => via a logical boolean expression, eg. Select[]
>
> Here is a example:
>
> In[1]:= Select[ {1, 2.3, a}, # \[Element] Reals  &]
> Out[1]= {1, 2.3}
>
> In[2]:= Cases[{ 1, 2.3, a}, _Real ]
> Out[2]= {2.3}
>
> In[3]:= Cases[{ 1, 2.3, a}, _Integer | _Rational | _Real]
> Out[3]= {1, 2.3}
>
> It's a nice example for thinking about what OO inheritance might be in
> Mathematica.
>
> I would says that Mathematica defines "types" in a syntactical way (head =
of
> expression) and uses them in pattern matching function (e.g. Cases), and
> defines "domain" in a more semantical (logical/mathematical) way and uses
> them in other functions (like Select).
>
> Of course types in Mathematica are more something like IntegerQ[] and not
> _Integer and hence are a semantical "thing" and not just syntactical.
>
> Greeting from Croatia,
> Drago
>
> "dimitris" <dimmechan at yahoo.com> wrote in message
> news:et5npe$jij$1 at smc.vnet.net...
> > As a second thought to your query I would suggest you to read
> > carefully the reply of
> > Andrzej Kozlowski to the recent thread with the title: "Map function
> > which adds last two numbers of a list".
> > Not very relevant at first glance but I think it talks about the right
> > "attitude" for attacking a "real" problem.
> >
> > http://groups.google.gr/group/comp.soft-sys.math.mathematica/browse_thr=
ead/=
> > thread/3b38366201665b24/9c76eb8c939ce75d?lnk=st&q=&rnum=28&hl=e=
l#9c=
> > 76eb8c939ce75d
> >
> >
> > Anyway...
> >
> > You have many ways to do what you want. You found by yourself (well
> > done!) that Cases gives your desired output.
> >
> > So why hanging around with Select?
> >
> > You could say for programming practise. But (at least!) for me the
> > important thing is to understand that Select is not "designed" for
> > doing things like what you desire. Cases is the key here (or other
> > built in functions suggested in the replies you got by some of the
> > gurus of this beautiful forum; no I don't talk about myself! I talk
> > about Bob Hanlon and Jean-Marc Gulliet!) . Not Select; except if you
> > just want to end with an extravagant code! So what? What's the deal?)
> >
> > As regards myself, Understanding the (BIG!) Difference between Select
> > and Cases is the most important thing.
> >
> > I copy directly from M. Trott's Guidebook for Programming...
> >
> > Select picks the arguments according to the truth value, and it
> > delivers the result with the same head as the selected expression.
> > Cases chooses according to patterns, and it gives a result in the form
> > of a list. The optional third argument in the two functions also has a
> > completely different role. In Select, it defines the number of objects
> > to be selected, whereas in Cases, it gives the level specification at
> > which the first argument is to be tested.
> >
> > Another issue which you should be more aware of (in my point of view
> > of course!) is why RuleDelayed is
> > unnessary here.
> >
> > A = {f[x], g[p, q, r, s], h[u, v, w]}
> > {f[x], g[p, q, r, s], h[u, v, w]}
> >
> > Cases[A, _[args__] :> {args}]
> > {{x}, {p, q, r, s}, {u, v, w}}
> >
> > Cases[A, _[args__] -> {args}]
> > {{x}, {p, q, r, s}, {u, v, w}}
> >
> > Trace[Cases[A, _[args__] :> {args}]]
> > {{HoldForm[A], HoldForm[{f[x], g[p, q, r, s], h[u, v, w]}]},
> >  HoldForm[Cases[{f[x], g[p, q, r, s], h[u, v, w]}, _[args__] :>
> > {args}]], HoldForm[{{x}, {p, q, r, s}, {u, v, w}}]}
> >
> > Trace[Cases[A, _[args__] -> {args}]]
> > {{HoldForm[A], HoldForm[{f[x], g[p, q, r, s], h[u, v, w]}]},
> >  HoldForm[Cases[{f[x], g[p, q, r, s], h[u, v, w]}, _[args__] ->
> > {args}]], HoldForm[{{x}, {p, q, r, s}, {u, v, w}}]}
> >
> >
> > What about here?
> >
> > sols = Solve[x^3 == 1]
> > {{x -> 1}, {x -> -(-1)^(1/3)}, {x -> (-1)^(2/3)}}
> >
> > sols /. (a_ -> b_) -> a -> ComplexExpand[b]
> > {{x -> 1}, {x -> -(-1)^(1/3)}, {x -> (-1)^(2/3)}}
> >
> > sols /. (a_ -> b_) :> a -> ComplexExpand[b]
> > {{x -> 1}, {x -> -(1/2) - (I*Sqrt[3])/2}, {x -> -(1/2) +
> > (I*Sqrt[3])/
> > 2}}
> >
> >
> > If you have finished the relevant material in the Help Browser about
> > (the so much!) useful Built-in Symbols
> > like Select, Cases, Fold, Nest, Map, Apply of Functional Progarmming
> > and you want more things to read/practise (and avoid unnessary hanging
> > around...) trying
> >
> > http://verbeia.com/mathematica/tips/Tricks.html
> > http://verbeia.com/mathematica/tips/GraphicsTricks.html
> >
> > that is the (very famous and so properly called) Suplementary Help
> > Browser of Ted Ersek!
> > As notebooks see here:
> >
> > http://library.wolfram.com/infocenter/MathSource/4557/
> >
> > Very challenging material!
> >
> >
> > And here is something truly amazing!
> >
> > http://documents.wolfram.com/flash/
> >
> > See also here
> >
> > http://library.wolfram.com/infocenter/MathSource/4286/
> >
> > and here
> >
> > http://www.mathematica.co.kr/
> >
> >
> > Best Regards
> > Dimitris
> >
> >
> >
> > =CF/=C7 Mr Ajit Sen =DD=E3=F1=E1=F8=E5:
> >> Dear MathGroup,
> >>
> >>   Given a list of functions
> >>
> >>   A={f[x],g[p,q,r,s],h[u,v,w]},
> >>
> >>  I'd like to pick out their arguments as a list.
> >>
> >>    Cases[A,_[args__]:>{args}]
> >>
> >>  works fine returning  {{x}, {p,q,r,s}, {u,v,w}}.
> >>
> >>   How do I achieve the same thing with Select ?
> >>
> >>
> >> Thanks for your help.
> >>
> >>   Ajit Sen
> >>
> >>
> >>
> >>
> >>
> >> ___________________________________________________________
> >> Yahoo! Messenger - NEW crystal clear PC to PC calling worldwide with
> >> voic=
> > email http://uk.messenger.yahoo.com
> >
> >



  • Prev by Date: Mathematica function for Chi Square Test...
  • Next by Date: Re: How to choose real positive solutions?
  • Previous by thread: Re: Re: Picking Arguments
  • Next by thread: Re: Re: Picking Arguments