 
 
 
 
 
 
Re: Re: Thread and MapThread
- To: mathgroup at smc.vnet.net
- Subject: [mg29882] Re: [mg29870] Re: Thread and MapThread
- From: Mianlai Zhou <lailai at nikhef.nl>
- Date: Tue, 17 Jul 2001 01:00:29 -0400 (EDT)
- Sender: owner-wri-mathgroup at wolfram.com
There is another alternative to fulfill that:
SetAttributes[Thread, HoldFirst];
Thread[ ftest[{x1, x2, x3}, {y1, y2, y3}] ]
Then it will give the answer you want:
{{f1[x1], f2[y1]}, {f1[x2], f2[y2]}, {f1[x3], f2[y3]}}
Enjoy it.
Mianlai Zhou
Theory Group, NIKHEF
Amsterdam, The Netherlands
On Sun, 15 Jul 2001, Allan Hayes wrote:
> David,
>
> Here are the relevant evaluation steps of
> Thread[ftest[{x1, x2, x3}, {y1, y2, y3}]]
>
>        Thread[ {f1[{x1, x2, x3}], f2[{y1, y2, y3}]}]
> (*ftest[...] evaluates before Thread acts*)
>
>        {f1[{x1, x2, x3}], f2[{y1, y2, y3}]}]
> (*Thread does nothing since it has not, for example, been told to thread
> over f1}*)
>
> Compare
>
> Thread[ftest[{x1,x2,x3},{y1,y2,y3}],f1]
>
>         f1[{{x1, x2, x3}, f2[{y1, y2, y3}]}]
>
>
> There are many ways of avoiding premature evaluation, here are a few
>
> Thread[Unevaluated[ftest[{x1,x2,x3},{y1,y2,y3}]]] (*caution:x1, ... are
> held*)
>
>         {{f1[x1], f2[y1]}, {f1[x2], f2[y2]}, {f1[x3], f2[y3]}}
>
>
> Block[{ftest},Thread[ftest[{x1,x2,x3},{y1,y2,y3}]]]
>
>         {{f1[x1], f2[y1]}, {f1[x2], f2[y2]}, {f1[x3], f2[y3]}}
>
>
> Evaluate[Thread[#[{x1,x2,x3},{y1,y2,y3}]]]&[ftest]
>
> {{f1[x1], f2[y1]}, {f1[x2], f2[y2]}, {f1[x3], f2[y3]}}
>
> --
> Allan
> ---------------------
> Allan Hayes
> Mathematica Training and Consulting
> Leicester UK
> www.haystack.demon.co.uk
> hay at haystack.demon.co.uk
> Voice: +44 (0)116 271 4198
> Fax: +44 (0)870 164 0565
>

