模式和变换规则
模式和变换规则
| _ | 任意表达式 |
| 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 重复的模式 |
| pattern1|pattern2|… | 与 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[…],…] 的值 |