       Re: pure function puzzle

• To: mathgroup at yoda.physics.unc.edu
• Subject: Re: pure function puzzle
• From: John Lee <lee at math.washington.edu>
• Date: Tue, 13 Jul 93 15:01:32 -0700

```Martin McClain <wmm at chem.wayne.edu> writes:

> I need a pure function that operates on

>         {x,{a,b,c}},

> where x, a, b, and c are all simple lists.  The output must be

>         {Ints[x,a],Ints[x,b],Ints[x,c]},

> where Ints means Intersection.  You would think this could be based on
> Thread, but when a,b,c,and x are all lists, Thread seems to get confused.
> Map also has a problem: it needs a function as its argument, and apparently
> nested pure functions are not allowed.  I can do the required
> transformation with a compound statement

> f1 = Intersection[x,#]&;
> f2 = Map[f1,#]&

> and then apply f2 to my input, but x is not known ahead of time.  I want
> this function as one step in a long Composition, and I really need a clean,
> single function of a single argument, producing a single object. Maybe some
> clever use of Hold, or Evaluate, or something like that ???  Any ideas?

Here's one fairly simple solution:

In:= f = Apply[ Intersection,
Transpose[{Table[#[], {Length[#[]]}], #[]}],
1 ] &;

In:= list = {{1, 3, 5, 7}, {{1, 2, 3}, {3, 4, 5, 6}, {5, 6, 7, 8}}};

In:= f[list]

Out= {{1, 3}, {3, 5}, {5, 7}}

On the other hand, if you're willing to forego the requirement that f be a
pure function, here's a much more straightforward definition:

In:= f2[ {x_, y_} ]:= (Intersection[ x, # ]&) /@ y;

In:= f2[list]

Out= {{1, 3}, {3, 5}, {5, 7}}

Jack Lee
Dept. of Mathematics
University of Washington
Seattle, WA

```

• Prev by Date: Displaying PS files
• Next by Date: Mathematica Music
• Previous by thread: pure function puzzle
• Next by thread: re: pure function puzzle