Let's say I have a list of pure functions that are nice algebraic expressions: say
l = {(#1 - 1)&, (#1^2 + #1)&, (#1^3 - 1)&}
What's an easy way to get a pure function that will give the product of these expressions? For example, in the above I'd like to get a function f with
f = (#1 - 1)(#1^2 + #1)(#1^3 - 1)&
I've tried (Times @@ Identity @@@ l)&, but this just gives (#1 - 1)(#1^2 + #1)(#1^3 - 1). Essentially, it seems my difficulty is converting a List of Function expressions to a Function[Times[...]] expression, and I can't see how to "strip off" the functions without messing up the referencing of the Slot[1] expressions inside.
Thanks for any help.
Answer
Mapping First over your list will strip off the Function head. Then multiply them together with Apply[Times... and finally Apply[Function... makes the result a pure function. Use the final Apply so the argument to Function is evaluated first as Function has the attribute HoldAll.
Apply[Function,{Apply[Times, Map[First,l]]}]
Gives...
(-1+#1) (#1+#1^2) (-1+#1^3)&
Comments
Post a Comment