DownValues, UpValues, SubValues, 和OwnValues之间的区别?

原链接:在这里

-------------------------------------------------------------------------------------------------

首先我们要知道,在Mma中,所有的功能其实都是各种各样的模式(patterns)的体现而已.

让我们从 OwnValues开始, 这种模式类型就是你在其他编程语言里学到的所谓"变量". 正如它字面上的意思所表示的:一个符号的OwnValues就是这个符号本身所代表的值.

 In[1] := a = 2; OwnValues[a]
Out[1] := {HoldPattern[a] :> 2}

在绝大部分情况下, 当一个符号被定义为函数的时候, 我们就不知不觉用到了DownValue. 此时, 这个符号本身没有任何意义除非在后面跟上合适的参数.

f[x_] := x^2

上面的式子定义了一个模式---每当形如f[blala]的表达式出现时就将其替换为blala^2. 仅仅有一个f是毫无意义的.

 In[2] := f
Out[2] := f

然而, 每当遇到一个下行值(就是表达式结构的下一层的值,比如在f[b]中,b就在f的下一层),模式就被应用了:

 In[3] := f[b]
Out[3] := b^2

可以用下面的方法查看上面生成的模式:

 In[4] := DownValues[f]
Out[4] := {HoldPattern[f[x_]] :> x^2}

下面来说UpValues.有时,把规格和外层的符号联系起来是很方便的.例如,定义一个符号c:当这个符号的下标是1时它的值为2.这个规则可以用如下代码定义:

c /: Subscript[c, 1] := 2
 In[5] := UpValues[c]
Out[5] := {HoldPattern[Subscript[c, 1]] :> 2}

最后是SubValues,用于下面这种类型的定义:

d[e][f] = x;
 In[6] := SubValues[d]
Out[6] := {HoldPattern[d[e][f]] :> x}

(这个不重要,请忽略吧)

posted on 2012-10-19 16:38  XLiao  阅读(363)  评论(0编辑  收藏  举报