{{{ #!rst public class GnappoProduct { /** * @param args * @throws SchemeException */ public static void main(String[] args) throws SchemeException { // TODO Auto-generated method stub SchemeFactoryManager fm = SchemeFactoryManager.instance(); fm.put("pow", new SchemeFactory() { public SchemeExpression create(Object... args) { return new SchemeExpressionPower((SchemeExpression) args[0], (SchemeExpression) args[1]); } }); SchemeExpression power = fm.create("pow", fm.create("SchemeExpressionInt", 2), fm.create("SchemeExpressionInt", 4)); power.prettyPrint(System.out); System.out.println(); System.out.print(power.evaluate(null)); } private static class SchemeExpressionPower extends SchemeExpressionAbstract { private SchemeExpression exp1; private SchemeExpression exp2; public SchemeExpressionPower(SchemeExpression expr1, SchemeExpression expr2) { exp1 = expr1; exp2 = expr2; } public SchemeValue evaluate(SchemeEnvironment env) throws SchemeException { return SchemeFactoryManager.instance() .create("SchemeExpressionInt", ((int) (Math.pow(exp1.evaluate(env).asInt(), exp2.evaluate(env).asInt())))).evaluate(env); } public void prettyPrint(PrintStream out) { out.print("(pow "); exp1.prettyPrint(out); out.print(" "); exp2.prettyPrint(out); out.print(")"); } } } }}}