Java 实现 λ-calculus

2016-11-21 08:14:58 +08:00
 notnl

最近教授上课讲了讲 Lambda 的 reduction ,比较感兴趣,就下来自己用 Java 实现了一个。

github: noti0na1/LambdaCalculus-java

例子

生成一个 lambda 表达式并输出

Expression fun = λ("x", apply(λ("x", apply("f", "x")), "x"));
System.out.println("fun = " + fun.toString());
// fun = λx.(λx.f x) x

对于一个 lambda 表达式,你也可以对它进行归约

System.out.println("fun  (reduced) = " + fun.reduce());
//  fun  (reduced) =  λx.f x

还可以归约到底并显示每一步

// apply this function
Expression app = apply(fun, "z");
// (λx.(λx.f x) x) z
System.out.println("app = " + app.toString());
// f z
System.out.println("app (fully reduced) = " + app.deepReduce().toString());
// print reduce steps
// or app.printReduceSteps(2) to print certain steps
app.printReduceSteps();
// (λx.(λx.f x) x) ((λx.x) z)
// (λx.f x) ((λx.x) z)
// (λx.f x) z
// f z

更多例子可以查看 com.notnl.lambda.examples, 我在例子里还实现了 lambda 演算中的算术、逻辑与谓词和有序对 (cons)。

欢迎各位指出问题或给建议,谢谢 😁

1841 次点击
所在节点    分享发现
0 条回复

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/321971

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX