一个功能的功能

我说,我有一些函数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]但没有奏效。

--------------解决方案-------------

那么,你的设置要求,g为A,B和C的功能,因为你明确地提出其FA功能。 可以改为做:

f[a_,b_,c_]=a+b+c;

g[f_,a_,b_,c_,d_] = f[a,b,c]+d

出来[2] = A + B + C + D

丹尼尔Lichtblau

丹尼尔的答案是正确的 - 它回答你的问题应该问!

但只是为了好玩这里的东西更接近你的问题其实问。

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_] := abc

In[5]:= g[ff, d]
Out[5]= abc + d

并给它一个第二个定义:

In[6]:= ff[a_, b_] := a + b
In[7]:= DownValues[ff]
Out[7]= {HoldPattern[ff[a_,b_,c_]] :> abc, 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]= abc + d

当然,事实上你不传递任何arguements到fg[f_,d_]将(在大多数情况下),使这种类型的事情很没有意义...

只是一边注意。

整个事情更有意义,当两种功能共享相同的参数,或者第二个函数的参数在第一隐含的。

例如:

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

我也我觉得很难辨别你的意图,但这是我的解释:

f[a_, b_, c_] := a + b + c
g[f_, d_] := f[##] + d &;

g[f, 3]

(* Out= f[##1] + 3 & *)

%[q, r, s]

(* Out= 3 + q + r + s *)

g[f, 5][1, 2, 3]

(* Out= 11 *)

这样一来, g[f, x]返回一个将其参数传递给函数f

在definiton

f[a_, b_, c_] := a+b+c

看一个,b和c如在函数调用第一,第二和第三个参数和NOT符号abc 。 类似如f := (#1 + #2 + #3)&调用f本身(不带参数)将不会得到所需的结果。

也许你想要做这样的事情:

f := a+b+c

现在, f作为的总和相关的abc ,这是全局符号,而不是函数参数。 然后,

f+d

将给a + b + c + d ,您可以使用ReplaceAll (或/.的替代:

f + d /. a->2x

b+c+d+2x2 f将给予2 (a+b+c) Sin[f]将给Sin[a+b+c] fc将给a+b等...

分类:数学钨 时间:2015-03-16 人气:4
本文关键词: 数学钨
分享到:

相关文章

Copyright (C) 55228885.com, All Rights Reserved.

55228885 版权所有 京ICP备15002868号

processed in 0.883 (s). 10 q(s)