Javaで ラムダ計算機を実装してみました。
ラムダ計算入門
この PDFを参考に、Javaでのラムダ計算を実装してみました。ついでに JavaCCを使って以下のような文を解釈できるようにしました。
(λx.x(y z)); λs.λz.s(s(sz));
実際には、以下のようなコードで入力の解析と簡約化を行います。
import static ch.jpn.taoe.lambda.Parser.*; import ch.jpn.taoe.lambda.*; public class Sample { public static void main(String[] args) { Parser parser = new Parser(); String input = "((λx. x) (λx. x)) ((λx. x) (λx. x))"; Expression exp = parser.parse(new LambdaParser(new StringReader(input))); System.out.println(exp); // ((λx.x)(λx.x))((λx.x)(λx.x)) Set<Expression> repeated = actual.repeat(); // 簡約化 Expression exp = repeated.toArray(new Expression[0])[0]; System.out.println(exp); // λx.x } }
ch.jpn.taoe.lambda.variableパッケージには、これを使った チャーチ数の計算や IF分の実装を行ったユーティリティもあります。
ソースは以下のURLからsvnでチェックアウトできます。
http://taoe.jpn.ch:8080/svn/trunk/lambda/