How to| 创建和使用规则
Wolfram 语言中的变换规则使您可以为符号、函数及所有其它类型的表达式设置局部值. 规则的使用提供了一个强大和可扩展的方法,用您指定的值来取代另一表达式的全部或一部分.
规则的缩写形式使用一个右箭头,它可以通过输入 -> 得到(在 - 和 > 之间无空格). 在进一步输入时,Wolfram 系统前端自动将 -> 转化为 . 任何一个符号都是 Rule 的缩写形式.
x -> 3通过观察 x3 的输出,您可以看到该规则并不做任何事情:输出仅仅是规则本身. 这是因为当规则单独存在时,它们是没有任何作用的. 您必须将规则与表达式合用才会有所用处.
规则可以通过使用 /. 应用于表达式(ReplaceAll 的缩写形式). 一般的语法为 expr/.rules.
2x + 1 /. x -> 32x + y /. {x -> 3, y -> 4}如果对同一变量给出两个规则,Wolfram 语言将仅用第一个规则:
2x + y /. {x -> 3, x -> 4}2x + y /. x -> 3y9 + x ^ 2 - 9x ^ 3 /. x ^ 2 - 9x ^ 3 -> 3y1 + f[x] + f[y] /. x -> 3对 f[x] 使用一个规则. 注意该规则与 f[x] 完全匹配,并不影响 f[y]:
1 + f[x] + f[y] /. f[x] -> p要代替函数 f,而不论其自变量如何,您必须在规则中使用一种模式.
规则 f[x_]x^2 可以被读作 “f[anything] 取 anything^2”:
1 + f[x] + f[y] /. f[x_] -> x ^ 2关于使用模式的更多信息,请参见"模式引言."
使用 设置的规则是即时规则. 也就是说,右端与规则同时计算:
x -> RandomReal[]您有时可能要使用延时规则,这种规则在用于表达式之前保持不被计算. 延时规则通过 RuleDelayed 创建.
延时规则的缩写形式是 :>(: 和 > 之间无空格). Wolfram 系统前端会自动将 :> 转换成 . 任何一个都代表 RuleDelayed 的缩写形式:
x :> RandomReal[]考虑这样一个问题:您希望使用一个规则来生成3个在0和1之间的随机实数. 使用即时规则生成的是3个相同的数:
{x, x, x} /. x -> RandomReal[]{x, x, x} /. x :> RandomReal[]显式使用 = 的赋值具有全局效应,而规则仅对使用它的表达式产生影响.
x = 3;xy -> 3;y规则必须用于表达式才有作用. 然而,您可以将一个规则赋给一个符号,然后像使用规则一样使用这个符号.
使用 = 将规则 p2 赋给 n,然后将 n 应用于一个表达式:
n = p -> 2;2p /. n由于 p2 现在作为符号 n 被全局保存,您可以继续在 p2 的地方使用 n.
类似地,您可以将一个表达式赋给一个符号,然后对这个符号应用规则:
t = 1 + y ^ 2 + y ^ 3 + 3y;t /. y -> 2