享受Lambda中的乐趣
告别枯燥和重复,我们支持类似编程语言的宏定义与环境管理,并在表达式中自由调用。
- 支持 递归宏(如阶乘、斐波那契数列)。
- 支持 惰性展开(Lazy Expansion),只有在计算需要时才展开宏,保持步骤清晰。
- 智能截断:对于超长的中间步骤(如 Church 数爆炸),自动折叠并仅渲染前缀,点击即可按需展开。
- Rust 驱动:利用 Rust 的所有权机制和零成本抽象,核心归约算法极快。
- 彩虹括号:自动为匹配的括号上色,一眼看穿
(((\x.x)))的层级结构。 - 语法高亮:宏、注释、Lambda 清晰易读。
- 日夜模式:Material 风格的深色/浅色主题,一键切换。
你需要安装 Rust
# 克隆仓库
git clone https://github.com/Duo-Star/Lambda_solver.git
cd Lambda_solver
# 运行
cargo run --release我们设计了一套符合直觉的语法,支持注释和分号分隔的定义。
- 变量:
x,y,a - Lambda:
\x.x或\xy.x(多参数缩写) - 应用:
x y(左结合) - 注释:
-- 单行注释或--/ 多行注释 /
使用 [Name]: Body; 的格式(注意分号)。
-- 定义数字 0 和 1
[0] : (\fx.x);
[1] : (\fx.fx);
-- 定义加法
[+] : (\mnfx.mf(nfx));
文件的最后一部分是要求解的表达式。
-- 计算 1 + 1
[+] [1] [1]
复制以下代码到软件中体验:
[1] : (\fx.fx);
[2] : (\fx.f(fx));
[T] : \xy.x;
[F] : \xy.y;
[If] : \pab.pab;
-- 如果真,则返回 1,否则返回 2
[If] [T] [1] [2]
得益于宏系统,我们可以直观地定义递归逻辑:
斐波那契
[1] : (\fx.fx);
[2] : (\fx.f(fx));
[3] : (\fx.f(f(fx)));
[+] : (\mnfx.mf(nfx));
[-] : (\mn.n(\kfx.k(\gh.h(gf))(\u.x)(\u.u))m);
[-1] : (\nfx.n(\gh.h(gf))(\u.x)(\u.u));
[<=] : (\mn.(\n.n(\x.\ab.b)(\ab.a)) ((\mn.n(\kfx.k(\gh.h(gf))(\u.x)(\u.u))m) m n));
[If] : (\pab.pab);
[Fib] : \n. [If] ([<=] n [1]) n ([+] ([Fib] ([-1] n)) ([Fib] ([-] n [2])));
[Fib] [3]
MathForest 欢迎你的加入 - 663251235
MIT License




