Re: Re: List Help Needed
- To: mathgroup at smc.vnet.net
- Subject: [mg68895] Re: [mg68863] Re: List Help Needed
- From: "Bharat Bhole" <bbhole at gmail.com>
- Date: Tue, 22 Aug 2006 05:20:43 -0400 (EDT)
- References: <ecbo4l$r5j$1@smc.vnet.net> <200608211033.GAA10513@smc.vnet.net> <a3224ef10608210825t56f3d97u4449f36f88e8a9f6@mail.gmail.com> <22d35c5a0608210903s2497b22ds5ab3d4e2f99fdcbc@mail.gmail.com>
- Sender: owner-wri-mathgroup at wolfram.com
Thanks Jean-Marc. The original question was not by me by the way.
Thanks very much anyway for the clarification.
Bharat.
On 8/21/06, Jean-Marc Gulliet <jeanmarc.gulliet at gmail.com> wrote:
>
> On 8/21/06, Bharat Bhole <bbhole at gmail.com> wrote:
> > The solution given by you works when lst has three or more pairs. But it
> > does not work with two pairs, i.e., with {{a,b},{c,d}}. Is there a
> simple
> > replacement rule which gives the result desired here regardless of the
> > number of elements in lst. This behavior of replacement rule seems
> > arbitrary.
>
> Hi Bharat,
>
> you are right: the first solution I gave you, using replacement rules,
> does not yield the expected result.
>
> lst= { { a,b}, { c,d}}; lst/. { x_,y_}-> { x, f[y]} returns {{a, b},
> f[{c, d}]} rather than the expected list {{a, f[b]}, {c, f[d]}}. The
> returned result is the correct one, indeed, since the replacement
> operator /. looks for the most general patterns first and then goes
> down to more and more specialised/restricted matches. Thus, applied to
> a list of two lists only, the rule matches the list itself before the
> individual sublists:
>
> MatchQ[{{a, b}, {c, d}}, {x_, y_}] --> True
> MatchQ[{{a, b}, {c, d}, {e, f}}, {x_, y_}] --> False
>
> One way to avoid this pitfall is to add a test on one or more heads of
> the elements of the sublists, assuming of course that they have the
> regular and definite structure. For instance, say that the first
> element is always an atom,
>
> lst/. { x_?AtomQ,y_}-> { x, f[y]}
> --> {{a, f[b]}, {c, f[d]}}
>
> Another way is to use Replace [1] with a level specification [2]. In
> the following example, we force Mathematica to start looking from the
> lowest level of the expression:
>
> Replace[ lst, { x_,y_}-> { x, f[y]}, -1]
> --> {{a, f[b]}, {c, f[d]}}
>
> Regards,
> Jean-Marc
>
> [1] http://documents.wolfram.com/mathematica/functions/Replace
>
> [2] "Level Specifications",
> http://documents.wolfram.com/mathematica/book/section-A.3.6
>
--
----------------------------------------------------------
"No problem can withstand the assault
of sustained thinking."
Voltaire
----------------------------------------------------------
- References:
- Re: List Help Needed
- From: Jean-Marc Gulliet <jeanmarc.gulliet@gmail.com>
- Re: List Help Needed