   evaluate: (vars) -> Math.log(@var.evaluate(vars))
   isOne: () -> @var.constructor == Num and @var.value == Math.E
   isZero: () -> @var.isOne()
+  contains: (d) -> @var.contains(d)
   differential: (d) -> (new Multiplication(new VarUnderOne(@var), @var.differential(d))).simplify()
+  integral: (d) ->
+    newVar = new Variable(d)
+    new Sum([new Multiplication(newVar, this), new Multiplication(new Num(-1), @var.differential(d))])
   simplify: () ->
     newVar = @var.simplify()
     if newVar.constructor == Num

  evaluate: (vars) -> @exp.evaluate(vars) ** @var.evaluate(vars)
  isZero: () -> @exp.isZero()
  isOne: () -> @exp.isOne() or @var.isZero()
  differential: (d) -> (new Multiplication(new Multiplication(new Log(@exp), @var.differential(d)),new ExponentialOp(@var,@exp))).simplify()
  simplify: () ->
    newVar = @var.simplify()
    newExp = @exp.simplify()

  constructor: (@value) ->
  evaluate: (vars) -> @value
  differential: (d) -> new Num(0)
  integral: (d) -> (new Multiplication(this,new Variable(d))).simplify()
  isZero: () -> @value == 0
  isOne: () -> @value == 1
  simplify: () -> this
