此为 Mathematica 4 文档,内容基于更早版本的 Wolfram 语言
查看最新文档(版本11.1)

2.3.1 引言

Mathematica 中用大量的模式来代表各类表达式,例如模式 f[x_] 表示形如 f[anything] 的一族表达式.
由于 Mathematica 中的许多运算可用于一类表达式,所以模式就十分有效.

用模式给出一类表达式的变换规则

用模式在指定类中找出表达式的位置

Mathematica 模式的标志是 "-" ,其基本规则是代表任意表达式.
例如 f[_] 表示形如 f[anything] 的表达式,并且将表达式 anything 命名为 x 以便在变换规则中引用.
可以把ꆰ "-" 放在表达式中的任何位置,得到与能以任何方式填充的表达式匹配的模式.

一些模式的例子

构造具有任何结构的模式

模式通常用来 "取消" 函数的变量. 定义 f[list_] 时,就需要用 类似于 Part 的函数来选出 list 的元素. 但是若知道集合中总是两个元素时,给出 函数定义就比 f[{x_, y_}] 方便,这就可以用 xy 指代元素. 但当集合中的元素不是两个时,刚定义的函数就不能作用.

定义求第一个元素对第二个元素的乘幂值的函数

用模式定义更方便地定义上面的函数

Mathematica 的模式是代表一类给定的结构,当一个表达式的结构与模式的结构 相同时,这个表达式就可以用在模式中. 即使数学上完全相同的两个表达式, 当它们的结构不同时,也不能用同一个模式来表示.
例如,模式 (1 + x_)^2 可以表示 (1 + a)^2(1 + b^3)^2 , 但不能表示 1 + 2 a + a^2 .尽管 1+2a+a^2(1 + a)^2 相等,但它与模式 (1 + x_)^2 有不同的结构.
在不改变表达式值的情况下,利用模式指代具有某种结构的表达式这 一点可以使我们建立表达式结构的变换规则.应该意识到 Mathematica 是以结构相等来匹配表达式的,而不是以数学上的相等来匹配表达式的. 可以用 ExpandFactor 使(1 + a)^21 + 2 a + a^2 具有相同的结构,但没有一般 的方法去判断任意两个数学表达式相等.
另一个例子是模式 x^n_ 与表达式 x^2 匹配,但它与 1 不匹配,尽管 1 可以写为 x^0,在 2.3.9 节将讨论如何给出模式使这种情形匹配. 应该记住在任何情况下 Mathematica 将按结构相等与模式匹配.

x^n_ 配,但不能与 1 和 x 匹配配,但不能与 1 和 x 匹配

另外,Mathematica 中的模式只与由 FullForm 给出的表达式的完全形式进行 匹配. 例如 1/x 的完全形式是 Power[x,-1],它与模式 x_^n_ 匹配,但不能与模式 x_/y_

列表中的表达式含有 b 的幂,故可以使用变换规则

列表的完全形式

Out[8]//FullForm=

尽管在模式匹配时 Mathematica 认为x'与x不相当,但在匹配时它考虑了 交换律、结合律等性质

在进行变换时使用了交换律和结合律

到此为止我们讨论了表示一个结构的模式,接下来我们将讨论 表示一类结构的模式.