mathematica 定义函数时连用两个中括号,如f[a_][x_],这是什么意思,与f[a_,x_]有什么本质区别吗?

来源:学生作业帮助网 编辑:作业帮 时间:2024/05/06 02:54:32

mathematica 定义函数时连用两个中括号,如f[a_][x_],这是什么意思,与f[a_,x_]有什么本质区别吗?
mathematica 定义函数时连用两个中括号,如f[a_][x_],这是什么意思,与f[a_,x_]有什么本质区别吗?

mathematica 定义函数时连用两个中括号,如f[a_][x_],这是什么意思,与f[a_,x_]有什么本质区别吗?
两者本质上还是有一些细微的不同,主要反映在两个函数的值集的不同,见下图:

可以看到函数 f 的定义是存在 f 的 DownValues,但是函数 g 的定义却是存在 g 的 SubValues 中的,对于一般的不涉及自定义函数属性操作的话,两者区别不大,推荐使用第一种表达方式,但是如果你除了自定义函数外,还要赋予函数一些属性,例如 HoldAll,Listable 等等,那么两者是有一些显著的差异的,稍不注意就会出错,切记只有 DownValues 定义的函数才能使所有的参数全部继承这些属性,而通过 SubValues 定义的函数只有最外面的参数才能继承属性.
下面是一个例子,看了之后就明白了.

上图中 f 和 g 的执行结果是不一样的.

经过分析,我初步认为两者完全一样,都是定义函数的方式。
首先我们采用两种方式分别定义一个函数:
f[x_, y_] = x^2 + y^2;
z[x_][y_] = x^2 + y^2;
再使用FullForm()函数查看函数的完整形式:
f[x,y]// FullForm
f[x][y]// FullForm
输出结果都是:
Plu...

全部展开

经过分析,我初步认为两者完全一样,都是定义函数的方式。
首先我们采用两种方式分别定义一个函数:
f[x_, y_] = x^2 + y^2;
z[x_][y_] = x^2 + y^2;
再使用FullForm()函数查看函数的完整形式:
f[x,y]// FullForm
f[x][y]// FullForm
输出结果都是:
Plus[Power[x,2],power[y,2]]

收起