比方说,我有一些f[a_,b_,c_]=a+b+c函数。现在我需要定义另一个函数g[f_,d_]=f+d,这里的f应该替换为f的定义,结果是a+b+c+d。
我该怎么做呢?我试过g[f_,d_]=f+d/.f->Definition[f],但是不起作用。
发布于 2011-04-05 06:41:34
嗯,你的设置要求g是a,b和c的函数,因为你显式地使f成为它的函数。相反,可以这样做:
f[a_,b_,c_]=a+b+c;
g[f_,a_,b_,c_,d_] = f[a,b,c]+dOut2= a+b+c+d
Daniel Lichtblau
发布于 2011-04-05 08:52:32
这只是个附注。
当两个函数共享相同的参数,或者第二个函数的参数在第一个函数中隐含时,整个事情就更有意义了。
例如:
f[x_] := 1 + 1/x;
g[h_, x_] := h[x]^x;
Limit[g[f, x], x -> +Infinity]
-> E或者类似于
f[x_] := EuclideanDistance[x, #] &
g[f_, x_] := If[f[2 x]@x < 3, x, 2 x]
g[f, 3]
->6
g[f,2]
->2发布于 2011-04-05 07:33:48
Daniel's answer是正确的-它回答了您应该问的问题!
但为了好玩,这里有一些更接近你实际问题的东西。
f[a_,b_,c_] := a + b + c
g[f_, d_] := Catch[Module[{dv},
Check[dv = DownValues[f], Throw[$Failed], {DownValues::sym}];
Switch[Length[dv],
0, Print["No DownValues"]; $Failed,
1, dv[[1, 2]] + d,
_?(# > 1 &), Print["More than one DownValue - using the first!"];
dv[[1, 2]] + d,
_, Print["huh?!"]; $Failed]]]测试它:
In[3]:= g[f, d]
Out[3]= a + b + c + d定义另一个函数:
ff[a_, b_, c_] := a b c
In[5]:= g[ff, d]
Out[5]= a b c + d然后再给它下一个定义:
In[6]:= ff[a_, b_] := a + b
In[7]:= DownValues[ff]
Out[7]= {HoldPattern[ff[a_,b_,c_]] :> a b c, HoldPattern[ff[a_,b_]] :> a+b}
In[8]:= g[ff, d]
During evaluation of In[8]:= More than one DownValue - using the first!
Out[8]= a b c + d当然,在g[f_,d_]中不向f传递任何论据的事实(在大多数情况下)会使这类事情变得非常没有意义……
https://stackoverflow.com/questions/5545113
复制相似问题