public abstract class BinOp extends AbstractNode {
    Node left;
    Node right;
    public BinOp(Node left,  Node right) {
	      this.left = left;
        this.right = right;
    }

    abstract protected Double compute(Double d1, Double d2);

    public Double eval(Assignation ass){
	      Double e1 = left.eval(ass);
        Double e2 = right.eval(ass);
        if ((e1 == null) || (e2 == null)) return null;
           return compute(e1, e2);
    }

    public Node substitute(String var, double d) {
	      left = left.substitute(var,d);
        right = right.substitute(var,d); 
        return this;
    }
    
    @Override
    public Object clone() throws CloneNotSupportedException {
        BinOp p = (BinOp) super.clone();
	      p.left = (Node) left.clone();
        p.right = (Node) right.clone();
        return p;
    }
}

