模式和变换规则
_ | 任意表达式 |
x_ | 名称为 x 的任意表达式 |
x:pattern | 名称为 x 的模式 |
pattern?test | 当使用 test 时,产生 True 的模式 |
_h | 头部为 h 的任意表达式 |
x_h | 头部为 h、名称为 x 的任意表达式 |
__ | 一个或多个表达式序列 |
___ | 零个或多个表达式序列 |
x__ 和 x___ | 名称为 x 的表达式序列 |
__h 和 ___h | 由每个头部为 h 的表达式组成的序列 |
x__h 和 x___h | 头部为 h、名称为 x 的表达式序列 |
PatternSequence[p1,p2,…] | 模式序列 |
OrderlessPatternSequence[p1,p2,…] | 无序的模式序列 |
KeyValuePattern[{key1val1,…}] | 无序的 keyivali 数据对序列 |
x_:v | 默认值为 v 的表达式 |
x_h:v | 头部为 h 并且默认值为 v 的表达式 |
x_. | 具有全局定义的默认值的表达式 |
Optional[x_h] | 具有头部 h 以及全局定义的默认值的表达式 |
Except[c] | 除了与 c 匹配的任意表达式 |
Except[c,pattern] | 与 pattern 匹配,但不与 c 匹配的任意表达式 |
pattern.. | 重复一次或多次的模式 |
pattern... | 重复零次或多次的模式 |
Repeated[pattern, spec] | 根据 spec 重复的模式 |
pattern1pattern2… | 与 patterni 中的至少一个匹配的模式 |
pattern/;cond | cond 等于 True 的模式 |
HoldPattern[pattern] | 未被计算的模式 |
Verbatim[expr] | 逐字匹配的表达式 |
OptionsPattern[] | 选项序列 |
Longest[pattern] | 与 pattern 一致的最长序列 |
Shortest[pattern] | 与 pattern 一致的最短序列 |
Pattern 对象.
一个模式对象比如 x__ 表示一个表达式序列. 所以,例如,f[x__] 可以表示 f[a,b,c],其中 x 为 Sequence[a,b,c]. 如果用户使用 x,比如在一个变换规则的结果中,那么该序列将与 x 所在的函数相拼接. 因此,g[u,x,u] 将变成 g[u,a,b,c,u].
当模式对象比如 x_:v 和 x_. 作为函数变量出现时,它们表示可能忽略的变量. 当忽略与 x_:v 相对应的变量时,x 将采用值 v. 当忽略与 x_. 相对应的变量时,x 将采用与其所在的函数相关联的默认值. 用户可以通过对 Default[f] 等进行赋值指定这些默认值.
Default[f] | 当 x_. 作为函数 f 的任意变量出现时,它的默认值 |
Default[f,n] | 当 x_. 作为第 n 个变量 (从尾端算起的第负 n 个数)时,它的默认值 |
Default[f,n,tot] | 当我们一共有 tot 个变量时,第 n 个变量的默认值 |
Default 值.
模式如 f[x__,y__,z__] 可以匹配具有 x、y 和 z 的不同可能值的表达式,比如 f[a,b,c,d,e]. 首先将尝试 x 和 y 的具有最小长度的选择. 一般说来,当单个函数中有多个 __ 或者 ___ 时,首先尝试的情况是让所有 __ 和 ___ 表示具有最小长度的序列,除了最后一个模式表示“剩余”的变量.
Orderless | f[x,y] 和 f[y,x] 是等价的 |
Flat | f[f[x],y] 和 f[x,y] 是等价的 |
OneIdentity | f[x] 和 x 是等价的 |
模式对象比如 x_ 可以表示具有属性 Flat 的函数 f 中的任意变量序列. 在这种情况下,x 的值是应用于变量序列的 f. 如果 f 具有属性 OneIdentity,当 x 对应于仅有一个变量的序列时,则使用 e 而不是 f[e].
f[args]=rhs | 与 f 相关联的赋值(下值 downvalue) |
t/:f[args]=rhs | 与 t 相关联的赋值(上值 upvalue) |
f[g[args]]^=rhs | 与 g 相关联的赋值(上值 upvalue) |
- 变换规则的左端与已经存储的变换规则相同,并且右端的任意 /; 条件也相同. 在这种情况下,将把新的变换规则在旧的变换规则的位置上插入.
- Wolfram 语言确定新的变换规则比已经存在的变换规则更为具体,并且如果它放置于该规则之后,将不会被使用. 在这种情况下,新规则放置于旧规则之前. 注意,在许多情况下,不可能判断一个规则是否比另一个规则更为具体;在这样的情况下,新规则总是在末尾插入.
Attributes[f] | f 的属性 |
DefaultValues[f] | f 的自变量的默认值 |
DownValues[f] | f[…]、f[…][…] 等等的值 |
FormatValues[f] | 与 f 相关联的显示格式 |
Messages[f] | 与 f 相关联的消息 |
NValues[f] | 与 f 相关联的数值 |
Options[f] | 与 f 相关联的选项的默认值 |
OwnValues[f] | f 本身的值 |
UpValues[f] | …[…,f[…],…] 的值 |
expr=. | 清除为 expr 所定义的值 |
f/:expr=. | 清除为 expr 定义的与 f 相关联的值 |
Clear[s1,s2,…] | 清除符号 si 的所有值,除了属性、消息以及默认值 |
ClearAll[s1,s2,…] | 清除 si 的所有值,包括属性、消息以及默认值 |
Remove[s1,s2,…] | 清除所有值,并且删除 si 的名称 |