MathGroup Archive 2008

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

Search the Archive

Re: Best practice passing expressions to functions


Hi,

SetAttributes[defineAFunction, HoldFirst]

defineAFunction[name_Symbol, expr_] :=
  Module[{vars},
   vars = Select[Cases[expr, _Symbol, Infinity],
     Context[#] =!= "System`" &];
   SetDelayed @@ {name @@ (Pattern[#, Blank[]] & /@ vars), expr}
   ]

and after

defineAFunction[blub, Sin[Pi*x] + y*z - Log[q]]

you have

In[]:=blub[x, y, z, q]
Out[]=x y - Log[z] + Sin[\[Pi] q]

Regards
   Jens


Remo Aschwanden wrote:
> Hi
> 
> I want to write procedures that accept expressions as parameters and be 
> able define functions based on these expressions, i.e.
> 
> f[exp_]:=Module[
>    "g[x_] := exp "
> ]
> 
> The code between the " " should clarify what I intend to do. Calling 
>    f[x^2-2x+4] 
> should lead to the definition of a function (or pattern)
>    g[x_]:=x^2-2x+4;
> 
> What's the best way to do this? How can I do this without being 
> dependent on the variables used in the expressions ("x")?
> 
> Thank you.
> Remo A.
> 
> 


  • Prev by Date: Re: Best practice passing expressions to functions
  • Next by Date: Re: Plot function of a function of a variable
  • Previous by thread: Re: Best practice passing expressions to functions
  • Next by thread: Re: Best practice passing expressions to functions