code: @Override
      public double membership(double x) {
          if (Double.isNaN(x)) {
              return Double.NaN;
          }
  
          if (Op.isEq(start, end)) {
              return height * 0.0;
          }
  
          if (Op.isLt(start, end)) {
              if (Op.isLE(x, start)) {
                  return height * 0.0;
              }
              if (Op.isGE(x, end)) {
                  return height * 1.0;
              }
              return height * (x - start) / (end - start);
          } else {
              if (Op.isGE(x, start)) {
                  return height * 0.0;
              }
              if (Op.isLE(x, end)) {
                  return height * 1.0;
              }
              return height * (start - x) / (start - end);
          }
      }
docs: Computes the membership function evaluated at `x`
  
  @param x
  @return
  `\begin{cases}
  
  0h & \mbox{if $x = e$}\cr
  
  \begin{cases} 0h & \mbox{if $x \leq s$}\cr 1h & \mbox{if $x \geq e$}\cr h
  (x - s) / (e - s) & \mbox{otherwise}\cr \end{cases} & \mbox{if $s < e$}\cr
  
  \begin{cases}
  0h & \mbox{if $x \geq s$}\cr
  1h & \mbox{if $x \leq e$}\cr
  h (s - x) / (s - e) & \mbox{otherwise}
  \end{cases} & \mbox{if $s > e$}\cr \end{cases}`
  
  where `h` is the height of the Term,
  `s` is the start of the Ramp,
  `e` is the end of the Ramp