/**
 * This is an interface that specifies the operations (methods) that arithmetic 
 * expressions must be able to perform.
 * 
 * @author Scot Drysdale
 */    

public interface Expression { 
  /**
   * Evaluates this expression.
   * @return the value of this Expression
   */
  abstract public double eval();

  /**
   * Take the derivative of this expression.
   * @param v the variable with respect to which the derivative is taken
   * @return the derivative of this Expression with respect to the variable v
   */
  abstract public Expression deriv(String v); 
}