Ответ Даниэля правильный - он отвечает на то, что должен был задать ваш вопрос!
Но просто для забавы вот кое-что ближе к тому, что на самом деле задал ваш вопрос.
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
Конечно, тот факт, что вы не передаете никаких аргументов f
в g[f_,d_]
, сделает (в большинстве случаев) этот типвещь довольно бессмысленная ...