- 编程语言
- 解释器
- CLI
- 科学计算
- 桌面应用
- 跨平台
【免费下载链接】Woxi
Wolfram Language / Mathematica reimplementation in Rust (Wolfram oxidized)
Woxi 是一个用 Rust 实现的 Wolfram Language 解释器,它的模式匹配与替换规则机制是符号计算的核心能力。本指南将带你快速掌握 Woxi 中的Pattern、Rule、ReplaceAll、ReplaceRepeated四大主角,理解x_、->、/.、//.这些符号背后的工作方式,并用少量示例帮你把"替换"用成日常工具。
上图是 Woxi Playground 的运行界面:左侧输入表达式,右侧即时看到代码执行结果与图形输出。你在 REPL 或 Jupyter notebook 里体验到的,正是同一套模式匹配与替换引擎。
一、核心概念速览:Pattern 与 Rule 两大基石
在 Wolfram Language 体系(Woxi 同样遵循)中,一切皆表达式,而模式匹配就是"按形状认领表达式"。
| 关键字 | 语法 | 作用 |
|---|---|---|
Pattern | x_ | 命名模式:x_匹配任意单个表达式并绑定给x |
Rule | a -> b | 立即规则:左边匹配成功,就替换成右边 |
RuleDelayed | a :> b | 延迟规则:右边在每次命中时才求值 |
ReplaceAll | expr /. rules | 按规则替换一次 |
ReplaceRepeated | expr //. rules | 反复替换直到不再变化 |
模式语法糖很直观:
x_—— 匹配任意一个表达式,绑定变量xx_.—— 可省略的参数模式__x/___x—— 匹配一个或多个 / 零个或多个元素的序列
这套匹配逻辑的完整实现位于 src/evaluator/pattern_matching.rs,它支持Orderless无序匹配、Condition条件守卫、PatternTest谓词测试等高级特性。
二、ReplaceAll(/.):一次替换,最常用
ReplaceAll是日常使用频率最高的替换函数:把表达式中所有符合规则左边的部分,替换为右边。
{a, b} /. a -> x (* => {x, b} *) {x^2, y^2} /. x -> 2 (* => {4, y^2} *)注意替换是一次性扫描,不会对新产生的结果再次应用规则。规则本身也是普通表达式,因此可以被整体替换:
(1 -> 2) /. Rule -> List (* => {1, 2} *)更多官方示例见 tests/cli/replacement_rules/ReplaceAll.md。
常见应用场景
- 代入求值:把符号变量换成具体数值,如
x^2 /. x -> 3 - 数据清洗:批量修改列表或关联中的元素
- 改写表达式:
f[x_] -> g[x]批量换函数名 - 生成参数化模板:一次定义规则,多处复用
三、ReplaceRepeated(//.):反复替换直到稳定
ReplaceRepeated会把规则反复施加,直到表达式不再变化:
f[f[f[2]]] //. f[x_] -> x (* => 2 *) f[f[f[2]]] //. f[x_] -> x + 1 (* => 5,共替换 3 层 *)两个典型用法:
- 化简嵌套结构:剥离多层包裹的函数头
- 迭代逼近:每轮替换都"推进一步",适合演示迭代过程
⚠️ 使用提示:如果规则会不断扩大表达式(例如x_ -> f[x]),//.可能永不终止,写规则时请先确认收敛方向。相关示例见 tests/cli/replacement_rules/ReplaceRepeated.md。
四、Rule(->)与 RuleDelayed(:>):立即 vs 延迟
这是新手最容易忽略的细节,却是控制替换行为的精髓:
a -> b(立即规则):b在定义规则的那一刻就求值。a :> b(延迟规则):b在每次规则命中时才求值,能看到当前绑定的模式变量。
f[1] /. f[x_] :> x + 1 (* 命中时 x 已绑定,得到 2 *)如果写成->,右边在定义时x还是未绑定的符号,结果往往不是你想要的。官方对照示例见 tests/cli/replacement_rules/Rule.md 与 tests/cli/replacement_rules/RuleDelayed.md。
五、实战:用替换规则做"符号编程"
下面用一个贴近实际的小例子串起全部概念——批量改写表达式结构:
(* 1. 定义模式:匹配任意 f 包裹的表达式 *) r = f[x_] :> g[x]^2 (* 2. 一次性替换 *) {f[1], f[2], h[3]} /. r (* => {g[1]^2, g[2]^2, h[3]} *) (* 3. 反复替换,直到没有 f 剩余 *) f[f[1]] //. r (* => g[g[1]^2]^2 *)三个要点回顾:
x_让规则"可复用",这是模式匹配的灵魂/.与//.的区别只在是否重复应用- 需要引用绑定变量时优先用
:>
六、在 Woxi 里动手体验
Woxi 支持 REPL、命令行(wo)、Jupyter kernel 与 WASM 沙箱多种运行方式,模式匹配与替换行为在所有入口保持一致。下面的 notebook 展示了 Woxi 的字符串处理、符号计算与函数式编程能力——而其中的Solve、Factor等函数内部,正是靠模式匹配引擎在驱动:
七、延伸阅读与资源
- 替换函数官方测试文档:tests/cli/replacement_rules.md(含
Replace、ReplaceAt等全部变体) - 匹配引擎源码:src/evaluator/pattern_matching.rs
- 字符串替换引擎:src/evaluator/string_replace.rs
- 符号计算文档:tests/cli/symbolic.md
总结
在 Woxi 中,模式匹配与替换规则的组合非常精炼:x_负责"认出"结构,->/:>负责"说清"如何替换,/.与//.决定"替换几轮"。掌握这五个关键字,你就能在 Woxi 里完成代入求值、表达式改写、结构清洗等大量符号化任务——这也是 Wolfram Language 风格编程最具魅力的一部分。
- 编程语言
- 解释器
- CLI
- 科学计算
- 桌面应用
- 跨平台
【免费下载链接】Woxi
Wolfram Language / Mathematica reimplementation in Rust (Wolfram oxidized)
相关推荐
4台Mac跑出32.5 t/s:exo 本地AI集群搭建完整指南
4台Mac跑出32.5 t/s:exo 本地AI集群搭建完整指南 给家里加一台机器,推理反而变慢——用 TCP 组网的 llama.cpp 实测就是这样。exo
人工智能大模型本地部署模型推理服务Windows系统优化终极指南:三分钟让电脑焕然一新的免费神器
Windows系统优化终极指南:三分钟让电脑焕然一新的免费神器 你是否刚刚安装了全新的Windows系统,面对空荡荡的桌面不知从何开始?你是否厌倦了Window
运维桌面应用Obsidian个性化定制深度指南:CSS代码片段与主题资源的技术实现与优化策略
Obsidian个性化定制深度指南:CSS代码片段与主题资源的技术实现与优化策略 问题场景:Obsidian原生界面在专业使用中的局限性 Obsidian作为一
文档教程知识管理
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考