@Override public Value binary(Term.BinaryOperator operator, Term left, Term right) { Value leftValue = left.accept(this); Value rightValue = right.accept(this); double l = leftValue.accept(extractNumber); double r = rightValue.accept(extractNumber); switch (operator) { case add: return values.number(l + r); case sub: return values.number(l - r); case mult: return values.number(l * r); case div: return values.number(l / r); default: throw new RuntimeException("Unknown operator: " + operator); } }
@Override public Value number(double value) { return values.number(value); }