@Override
    public String execute(String functionName, String argumentsCSV,
            TreeMap<String, Double> variables) throws Exception {

        String[] args = argumentsCSV.split(",");

        for (int i = 0; i < args.length; i++) {
            Solver solver = new Solver(args[i], variables);
            args[i] = solver.solve();
        }

        switch (functionName) {
            case "ln":
                return String.valueOf(ln(Double.parseDouble(args[0])));
            case "lg":
                return String.valueOf(lg(Double.parseDouble(args[0])));
            case "log":
                return String.valueOf(log(Double.parseDouble(args[0]),
                        Double.parseDouble(args[1])));

            case "sin":
                return String.valueOf(sin(Double.parseDouble(args[0])));
            case "sinh":
                return String.valueOf(sinh(Double.parseDouble(args[0])));
            case "asin":
                return String.valueOf(asin(Double.parseDouble(args[0])));

            case "cos":
                return String.valueOf(cos(Double.parseDouble(args[0])));
            case "cosh":
                return String.valueOf(cosh(Double.parseDouble(args[0])));
            case "acos":
                return String.valueOf(acos(Double.parseDouble(args[0])));

            case "tan":
                return String.valueOf(tan(Double.parseDouble(args[0])));
            case "tanh":
                return String.valueOf(tanh(Double.parseDouble(args[0])));
            case "atan":
                return String.valueOf(atan(Double.parseDouble(args[0])));

            case "csc":
                return String.valueOf(csc(Double.parseDouble(args[0])));
            case "acsc":
                return String.valueOf(acsc(Double.parseDouble(args[0])));

            case "sec":
                return String.valueOf(sec(Double.parseDouble(args[0])));
            case "asec":
                return String.valueOf(acsc(Double.parseDouble(args[0])));

            case "cot":
                return String.valueOf(cot(Double.parseDouble(args[0])));
            case "acot":
                return String.valueOf(acot(Double.parseDouble(args[0])));

            default:
                throw new Exception("Function not found: "
                        + functionName + " (in MathDefaultFunc)");
        }
    }