变量个数不确定的函数

f 不可结合时,模式 仅代表恰有两个变量的函数. 有时还需要建立具有任意数目的自变量的函数.

这可以通过多重空位来实现. 一个空位 表示一个 Mathematica 表达式,两个空位 表示多个表达式.

这里 表示一系列表达式 .
In[1]:=
Click for copyable input
Out[1]=
中挑选重复元素的更复杂的定义.
In[2]:=
Click for copyable input
应用这一定义找出两对元素.
In[3]:=
Click for copyable input
Out[3]=

双空位 表示一个或多个表达式的序列. 三空位 表示零个或多个表达式序列. 在使用三空位时,很容易导致死循环这类错误. 例如,定义 ,接下来输入 将进入死循环状态,此时, 将反复地与零元素序列进行匹配. 所以,要尽量地少用三空位.

_单一表达式
x_名为 x 的表达式
__一个或多个表达式序列
x__名为 x 的表达式列
x__h头部为 h 的表达式列
___零个或多个表达式序列
x___名为 x 的零个或多个表达式序列
x___h头部为 h 的零个或多个表达式序列

不同类型的模式.

PlusTimes 这样具有结合性的函数,Mathematica 自动处理变量的数目,不需要使用双空位和三空位,如 "有交换性和结合性的函数" 中讨论的.

在使用多重空位时,对特定的表达式有不同的匹配方式. 默认情况下,Mathematica 总是先将模式中的第一个多空位与变量的最短序列匹配. 可以通过在模式的项周围使用 Longest 或者 Shortest 括起来来改变顺序.

Longest[p]匹配与模式 p 一致的最长序列
Shortest[p]匹配与模式 p 一致的最短序列

控制匹配的顺序.

这里给出了 Mathematica 所有可能的匹配.
In[4]:=
Click for copyable input
Out[4]=
这里命令 Mathematicax__ 先尝试最长的匹配.
In[5]:=
Click for copyable input
Out[5]=
许多枚举类型可以使用具有不同模式类型的 ReplaceList 来实现.
In[6]:=
Click for copyable input
Out[6]=
这里列举出所有至少具有一个元素的子列表.
In[7]:=
Click for copyable input
Out[7]=
这里先对 x__ 尝试最短匹配.
In[8]:=
Click for copyable input
Out[8]=
New to Mathematica? Find your learning path »
Have a question? Ask support »