Services & Resources / Wolfram Forums
-----
 /
MathGroup Archive
2005
*January
*February
*March
*April
*May
*June
*July
*August
*September
*October
*November
*December
*Archive Index
*Ask about this page
*Print this page
*Give us feedback
*Sign up for the Wolfram Insider

MathGroup Archive 2005

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

Search the Archive

Re: Controlled evaluation of functions

  • To: mathgroup at smc.vnet.net
  • Subject: [mg56809] Re: [mg56763] Controlled evaluation of functions
  • From: yehuda ben-shimol <bsyehuda at gmail.com>
  • Date: Fri, 6 May 2005 03:00:55 -0400 (EDT)
  • References: <200505051002.GAA22030@smc.vnet.net>
  • Reply-to: yehuda ben-shimol <bsyehuda at gmail.com>
  • Sender: owner-wri-mathgroup at wolfram.com

Hi,
you can always use an undefined function that will serve as a dummy
head for your expressions and then use replacement rule to replace
this "dummy head" with your true function.
k[x_] := x^2;  (*you original function*)
f[i_, x_] := dh[i x]; (* dh stands for Dummy Head *)
g[x_]:= Table[f[i, x], {i, 3}]; (*use SetDelayed in your code and not Set *)

Then 
g[y] returns
{dh[y], dh[2 y], dh[3 y]}
and
{3, 0, 1}.g[y] returns
3 dh[y] + dh[3 y]
No its time to use pattern matching (or just replacing heads)
first option
g[x]/.dh[x_]->k[x]
second option
g[x]/.dh->k
third option
Map[Apply[k,#]&,g[x]]
or shortly
Apply[k,#]&/@g[x]
yehuda


On 5/5/05, Brett Patterson <muckle.moose at gmail.com> wrote:
> Consider the following behaviour:
> 
>   In[1]:= f[i_, x_] := Sin[i x]
> 
>   In[2]:= g[x_] = Table[f[i, x], {i, 3}]
> 
>   Out[2]= {Sin[x], Sin[2 x], Sin[3 x]}
> 
>   In[3]:= {3, 0, 1} . g[y]
> 
>   Out[3]= 3 Sin[y] + Sin[3 y]
> 
> This is what I want to do, but using my own function instead of Sin.
> However, this is the result:
> 
>   In[4]:= k[x_] := x^2           (* This is my alternative to Sin *)
> 
>   In[5]:= f[i_, x_] := k[i x]
> 
>   In[6]:= g[x_] = Table[f[i, x], {i, 3}]
> 
>   Out[6]= {x^2, 4 x^2, 9 x^2}    (* I want {k[x], k[2 x], k[3 x]} *)
> 
>   In[7]:= {3, 0, 1} . g[y]
> 
>   Out[7]= 12 y^2                 (* I want 3 k[y] + k[3 y] *)
> 
> How can I get the function k to behave like Sin, so that it is not
> evaluated?
> 
> Note that in my real application, k is a lot more complex and has
> conditions on its arguments, etc.
> 
> Thanks!
> 
> Brett Patterson
> 
>


  • Prev by Date: Re: Bug in Integrate in Version 5.1?
  • Next by Date: Re: letrec/named let
  • Previous by thread: Re: Controlled evaluation of functions
  • Next by thread: Re: Controlled evaluation of functions