/******************************************************************************* A Simple Lambda Calculus Interpreter Version 1.00 Copyright (C) 1996-1997 Colin J. Taylor This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. Main applet class ******************************************************************************/ // Alexandr Korlyukov // korlyukov@grsu.grodno.by /** Calculation of logic functions in Lambda-calculation. * * strStart(param[nVar]) * strStart - is fixed for the supercompiler * param[nVar] - Logic variable, is not fixed for the supercompiler * * It is necessary to set: strStart, nVar * * The task for the supercompiler * set A=-s %lambda%\Src Abstraction Application Binding Closure Environment Expression Lexer Numbers Operator Parser Primitive PrintVar Suspension Symbol Token Variable * call jScp -m test -ul3 -i -r3000 -v0 %* Lambda -e A >L.js */ public class Lambda { // Example 1 x & (y | z) // public static final String strStart = "\\x. \\y. \\z. and x (or y z)"; // public static final int nVar = 3; // Example 2 x | (y & z) // public static final String strStart = "\\x. \\y. \\z. or x (and y z)"; // public static final int nVar = 3; // Example 3 Implication // public static final String strStart = "\\x. \\y. impl x y"; // public static final int nVar = 2; // Example 4 Identically true function // public static final String strStart = "\\x. \\y. impl x (impl y x)"; // public static final int nVar = 2; // Example 5 Implication (3 variable) // public static final String strStart = "\\x. \\y. \\z. impl x y"; // public static final int nVar = 3; // Example 6 Identically true function // public static final String strStart = "\\x. \\y. \\z. impl x (impl y x)"; // public static final int nVar = 3; // Example 7 Other identically true function // public static final String strStart = "\\x. \\y. \\z. impl (impl x (impl y z)) (impl (impl x y) (impl x z))"; // public static final int nVar = 3; // Example 8 Implication (4 variable) // public static final String strStart = "\\x. \\y. \\z. \\u. impl x y"; // public static final int nVar = 4; // Example 9 True only in two cases // public static final String strStart = "\\x. \\y. \\z. or (and x (and y z)) (and (not x) (and (not y) (not z)))"; // public static final int nVar = 3; // Example 10 (x & y) | (z & u) // public static final String strStart = "\\x. \\y. \\z. \\u. or (and x y ) (and z u)"; // public static final int nVar = 4; // Example 11 (x | not x) & (y | not y) & z = true & true & z = z // public static final String strStart = "\\x. \\y. \\z. and (and (or x (not x)) (or y (not y))) z"; // public static final int nVar = 3; // Example 12 Max True - (x & y) | (y & z) | (x & z) // public static final String strStart = "\\x. \\y. \\z. or (and x y) (or (and y z) (and x z))"; // public static final int nVar = 3; // Example 13 Mostik // public static final String strStart = "\\x. \\y. \\z. \\u. \\v. or (or (and x y) (and z u)) (or (and x (and v u)) (and z (and v y)))"; // public static final int nVar = 5; // Example 14 Equality // public static final String strStart = "\\x. \\y. and (impl x y) (impl y x)"; // public static final int nVar = 2; // Example 15 True only in two cases // public static final String strStart = "\\x. \\y. \\z. \\u. x (y (z (u true false) (false)) (false)) (y (false) (z (false) (u false true)))"; // public static final int nVar = 4; // Example 16 True only in ... cases // public static final String strStart = "\\x. \\y. \\z. \\u. x (y (z (u true false) (false)) (false)) (y (false) (z (true) (u false true)))"; // public static final int nVar = 4; // Example 17 x y z // public static final String strStart = "\\x. \\y. \\z. x y z"; // public static final int nVar = 3; // Example 18 x y z u v public static final String strStart = "\\x. \\y. \\z. \\u. \\v. x y z u v"; public static final int nVar = 5; public static final String[] instruction = { "let true = \\x. \\y. x", "let false = \\x. \\y. y", "let impl = \\x. \\y. x y true", "let not = \\x. x false true", "let or = \\x. \\y. impl (not x) y", "let and = \\x. \\y. not (or (not x) (not y))" }; public static void main(String args[]) throws Exception{ boolean[] param = new boolean[nVar]; for (int i=0; i<nVar; i++) { param[i] = true; } long start1 = System.currentTimeMillis(); boolean bbb = test(param); System.out.println(bbb); long start2 = System.currentTimeMillis(); System.out.println(""); System.out.println("Time1 = " + (start2-start1)); } public static boolean test(boolean[] param) { Parser p = new Parser(); Environment topLevel = new Environment(); Expression expr = null; Expression result = null; for (int i=0; i<instruction.length; i++) { Lexer lex = new Lexer(instruction[i]); lex.init(); expr = p.parse(lex); expr.evaluate(topLevel); } String strLexer = ""; for (int i=0; i<nVar; i++) { if(param[i]) strLexer = strLexer + " true"; else strLexer = strLexer + " false"; } Lexer lex = new Lexer("(" + strStart + ")" + strLexer + " 1 0"); lex.init(); expr = p.parse(lex); result = expr.evaluate(topLevel); Expression b_44 = result.evaluate((Environment)null); if(((Numbers)b_44).value == 1) return true; else return false; } // Some handy methods for outputting text public static void emit(String str) { System.out.print(str); } public static void emitnewln() { System.out.println("\n" ); } public static void emitln(String str) { System.out.println("> " + str + "\n"); } }