20

例如,如果我正在定义以下函数

exprod[n_] := Expand[Product[x + i, {i, 1, n}]]

那么为什么变量n后面的下划线在函数定义中是必须的呢?这种风格从何而来,还是只针对 Mathematica 编程语言?

4

1 回答 1

22

下划线来自模式匹配。

x_ 匹配任何内容,并且 thisanything 绑定到函数主体中的名称 x。

l[x_ * y_] := l[x] + l[y];

然后在 l[2*z] 首先表达式 2*z 与模式 x_ * y_ 匹配。然后 x 绑定到 2 并且 y 绑定到 z。然后计算表达式 l[x] + l[y],结果变为 l[2]+l[z]。

现在假设我们要将 e 上 l 的值定义为 1。我们写 l[e] := 1 还是 l[e_] := 1 ?

一个说 l 到(字面上)变量 e 必须是 1。另一个说 l 到某物给出 1。

http://reference.wolfram.com/mathematica/tutorial/Introduction-Patterns.html

于 2012-05-21T16:44:19.063 回答