예제 #1
0
  /**
   * Evaluates the given ExpressionValue and returns the result in MathPiper syntax.
   *
   * @param resolveVariables: states whether variables from the GeoGebra kernel should be used. Note
   *     that this changes the given ExpressionValue.
   */
  public synchronized String toMaximaString(ValidExpression ve, boolean resolveVariables) {

    // resolve global variables
    if (resolveVariables) {
      casParser.resolveVariablesForCAS(ve);
    }

    // convert to Maxima String
    String MaximaStr = doToMaximaString(ve, resolveVariables);

    // handle assignments
    String veLabel = ve.getLabel();
    if (veLabel != null) {
      StringBuilder sb = new StringBuilder();

      if (ve instanceof FunctionNVar) {
        // function, e.g. f(x) := 2*x
        FunctionNVar fun = (FunctionNVar) ve;
        sb.append(veLabel);
        sb.append("(");
        sb.append(fun.getVarString());
        sb.append(") := ");

        // evaluate right hand side:
        // import for e.g. g(x) := Eval(D(x) x^2)
        // sb.append("Eval(");
        sb.append(MaximaStr);
        // sb.append(")");
        MaximaStr = sb.toString();
      } else {
        // assignment, e.g. a := 5
        MaximaStr = veLabel + " := " + MaximaStr;
      }
    }

    // TODO: remove
    //		System.out.println("CASmaxima.toMaxima: " + MaximaStr);
    return MaximaStr;
  }