
最近教授上课讲了讲 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)。
欢迎各位指出问题或给建议,谢谢