package org.archstudio.prolog.op.iso; import java.math.BigInteger; import java.util.List; import java.util.Map; import org.archstudio.prolog.engine.PrologUtils; import org.archstudio.prolog.engine.ProofContext; import org.archstudio.prolog.op.Evaluable; import org.archstudio.prolog.term.ComplexTerm; import org.archstudio.prolog.term.Term; import org.archstudio.prolog.term.VariableTerm; public class Add extends ComplexTerm implements Evaluable { public Add(String name, List<? extends Term> terms) { super(name, 2, terms); } @Override public java.lang.Number evaluate(ProofContext proofContext, Map<VariableTerm, Term> variables) { java.lang.Number n1 = PrologUtils.evaluate(proofContext, getTerm(0), variables); java.lang.Number n2 = PrologUtils.evaluate(proofContext, getTerm(1), variables); if (n1 instanceof BigInteger && n2 instanceof BigInteger) { return ((BigInteger) n1).add((BigInteger) n2); } return PrologUtils.toBigDecimal(n1).add(PrologUtils.toBigDecimal(n2)); } }