Replace

Replace[expr,rules]

应用一个规则或规则列表来转换整个表达式 expr.

Replace[expr,rules,levelspec]

应用规则到 expr 中由 levelspec 指定的部分.

Replace[rules]

表示可以应用于表达式的 Replace 操作符格式.

更多信息和选项

  • 这些规则必须具有 lhs->rhslhs:>rhs 的形式.
  • 可以给出一个规则列表. 按次序应用规则. 返回第一个应用的规则所得到的结果. 如果没有应用到任何一个规则,则返回原表达式 expr.
  • 如果规则列表用嵌套列表的形式给出,Replace 将有效地映射到内层列表上. 因此Replace[expr,{{r11,r12},{r21,},}] 等价于{Replace[expr,{r11,r12}],Replace[expr,{r21,}],}.
  • :> 定义的延时规则可以包含 /; 条件.
  • Replace 用标准的层次指定:
  • n1 层到第 n
    Infinity1 层到 Infinity
    All所有层,包括第 0 层
    {n}仅应用第 n
    {n1,n2}n1 层到第 n2
  • Replacelevelspec 缺省值是 {0},对应于整个表达式.
  • 正层的 n 由指标 n 指定的 expr 所有部分组成.
  • 负层的-n 由带有深度 n expr 所有部分组成.
  • -1 由不带子集的数值、符号和其它对象组成.
  • 如果 levelspec 包括多个层,先匹配给定的子表达式中更深层的表达式.
  • 选项设置 Heads->True 下,Replace 也作用于表达式的头部和其它部分.
  • levelspec 指定的部分应用替换,甚至在它们有 Hold 或相关包装下.
  • Replace[rules][expr] 等价于 Replace[expr,rules].

范例

打开所有单元关闭所有单元

基本范例  (4)

缺省情况下,Replace 将规则仅应用到整个表达式上:

它并不作用到子集中:

规则列表的列表给出一个结果列表:

使用操作符形式的 Replace

应用单个可能的替换:

应用第一个匹配的规则:

分别应用每个规则:

范围  (15)

如果没有相匹配的规则,则返回原来的表达式:

在第 1 层的替换:

替换列表中测试方程的结果为 True 的元素:

替换列表中满足布尔表达式的元素:

用特定的标头替换矩阵的元素:

替换表达式最深层的部分(不含有子部分的部分):

在第1 层到第 3 层进行替换:

在第 0 层到第 2 层进行替换:

替换所有层:

Replace 还可用于 RuleDelayed

根据结构插入保留表达式中:

在替换前不对规则的右侧进行运算:

在替换前对规则的右侧进行运算:

Dispatch 可以代替规则列表:

Association 可以代替规则列表:

Association 中的所有值应用函数:

反转 Association 中的键和值:

Association 的规则提取到列表中:

在第 1 层进行替换,解构关联:

选项  (2)

Heads  (2)

缺省情况下,不对标头进行模式匹配:

运用选项 Heads->True 替换标头:

Heads->True 时,标头被视为与参数处于同一深度:

这与如何处理层 (level) 是一致的:

因此,Heads->True 对于缺省的 {0} 层没有影响:

应用  (1)

定义函数 f

通常情况下,在得到最终结果之前将重复进行计算:

Hold 输入,用 fDownValues 来替换,对运算的单个步骤进行检查:

再前进一层:

属性和关系  (12)

空列表被视为不含有匹配的规则:

当用列表的列表进行替换时,结果为同样长度的列表:

层规定 All 等价于 {0,-1}{0,}

如果规则与多个层相匹配,Replace 将会对所有匹配子表达式进行转换:

这里展示了替换发生的次序:

当给定多层时,Replace 使用深度优先搜索扫描表达式:

缺省情况下,Replace 替换整个表达式:

也允许替换指定层:

ReplaceAll 替换所有匹配的部分:

带有参数 AllReplace 将尝试只对每个子表达式进行一次替换:

ReplaceAll 对所能替换的最大的子表达式进行替换,然后停止操作:

ReplaceRepeated 重复应用 ReplaceAll 直到表达式不再变化为止:

Replace 在特定层进行模式匹配:

ReplacePart 重写指定位置上的子表达式:

ReplaceList 给出所有可能的匹配组成的列表:

Replace 给出第一个标准匹配:

Replace 可以对整个关联进行转换:

但是进入关联后则只替换值,不替换键:

Replace 匹配给定层级的个别表达式:

SequenceReplace 匹配第一层的表达式序列:

Replace[expr,lhsrhs] returns a transformed result if and only if MatchQ[expr,lhs] yields True:

可能存在的问题  (2)

应用较长的规则列表会比较慢:

使用 Dispatch 会大幅提高速度:

可以用关联来指定替换规则,但是把键视为 Verbatim 值:

与下式比较:

等价于关联的规则列表如下所示:

Wolfram Research (1988),Replace,Wolfram 语言函数,https://reference.wolfram.com/language/ref/Replace.html (更新于 2014 年).

文本

Wolfram Research (1988),Replace,Wolfram 语言函数,https://reference.wolfram.com/language/ref/Replace.html (更新于 2014 年).

CMS

Wolfram 语言. 1988. "Replace." Wolfram 语言与系统参考资料中心. Wolfram Research. 最新版本 2014. https://reference.wolfram.com/language/ref/Replace.html.

APA

Wolfram 语言. (1988). Replace. Wolfram 语言与系统参考资料中心. 追溯自 https://reference.wolfram.com/language/ref/Replace.html 年

BibTeX

@misc{reference.wolfram_2024_replace, author="Wolfram Research", title="{Replace}", year="2014", howpublished="\url{https://reference.wolfram.com/language/ref/Replace.html}", note=[Accessed: 17-November-2024 ]}

BibLaTeX

@online{reference.wolfram_2024_replace, organization={Wolfram Research}, title={Replace}, year={2014}, url={https://reference.wolfram.com/language/ref/Replace.html}, note=[Accessed: 17-November-2024 ]}