Mathematica 9 is now available

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不相当,但在匹配时它考虑了 交换律、结合律等性质

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

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



Any questions about topics on this page? Click here to get an individual response.Buy NowMore Information
THIS IS DOCUMENTATION FOR AN OBSOLETE PRODUCT.
SEE THE DOCUMENTATION CENTER FOR THE LATEST INFORMATION.