public abstract class UnOp extends AbstractNode {
  
    Node child;
    public UnOp (Node child) {
	     this.child = child;
    }
    abstract protected Double compute(Double d);

    public Double eval(Assignation ass){
       Double e = child.eval(ass);    
       if (e == null) return null;
       return compute(e);
    }

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