@Override public Expression replace(Expression expression) { if (expression == toReplace) return replacement; else return super.replace(expression); }
@Override public void visit(OuterProduct node) { visitBinaryOperation(node); }
@Override public void visit(FloatConstant node) { visitTerminal(node); }
@Override public void visit(LogicalNegation node) { visitUnaryOperation(node); }
@Override public void visit(LogicalAnd node) { visitBinaryOperation(node); }
@Override public void visit(Variable node) { visitTerminal(node); }
@Override public void visit(MathFunctionCall node) { visitUnaryOperation(node); }
@Override public void visit(Addition node) { visitBinaryOperation(node); }
@Override public void visit(MultivectorComponent node) { visitTerminal(node); }
@Override public void visit(Reverse node) { visitUnaryOperation(node); }
@Override public void visit(Division node) { visitBinaryOperation(node); }
@Override public void visit(BaseVector node) { visitTerminal(node); }
@Override public void visit(Negation node) { visitUnaryOperation(node); }
@Override public void visit(Inequality node) { visitBinaryOperation(node); }
@Override public void visit(Relation relation) { visitBinaryOperation(relation); }
@Override public void visit(Exponentiation node) { visitBinaryOperation(node); }
@Override public void visit(LogicalOr node) { visitBinaryOperation(node); }
@Override public void visit(Subtraction node) { visitBinaryOperation(node); }
@Override public void visit(InnerProduct node) { visitBinaryOperation(node); }
@Override public void visit(Multiplication node) { visitBinaryOperation(node); }