Class MacroFunction

  • All Implemented Interfaces:
    JepComponent, PostfixMathCommandI, java.io.Serializable
    Direct Known Subclasses:
    LambdaFunction

    public class MacroFunction
    extends PostfixMathCommand
    implements JepComponent
    A function specified by a string. For example
     MacroFunction fact = new MacroFunction(
                "fact",new String[]{"x"}, 
                "if(x>1,x*fact(x-1),1)");
     jep.addFunction("fact",fact);
     fact.init(jep);
     Node n = jep.parse("fact(5)");
     
    Author:
    R Morris.
    See Also:
    Serialized Form
    • Field Detail

      • nParam

        protected final int nParam
      • varNames

        protected final java.lang.String[] varNames
      • expression

        protected final java.lang.String expression
      • preCompiled

        protected final Node preCompiled
      • topNode

        protected transient Node topNode
      • vars

        protected transient Variable[] vars
    • Constructor Detail

      • MacroFunction

        public MacroFunction​(Jep jep,
                             java.lang.String funName,
                             java.lang.String[] parameters,
                             java.lang.String expression)
        Create a macro function with two or more arguments defined by an expression.
        Parameters:
        jep - The jep instance
        funName - name of the function
        parameters - an array of the formal parameter names used by the function
        expression -
        Since:
        3.4.0
      • MacroFunction

        public MacroFunction​(Jep jep,
                             java.lang.String funName,
                             java.lang.String parameter,
                             java.lang.String expression)
        Create a macro function with a single arguments defined by an expression.
        Parameters:
        jep - The jep instance
        funName - name of the function
        parameter - the name of the formal parameter.
        expression -
        Since:
        3.4.0
      • MacroFunction

        public MacroFunction​(java.lang.String funName,
                             java.lang.String[] parameters,
                             java.lang.String expression)
        Create a macro function with two or more arguments defined by an expression. Use this method for recursive functions like factorial. The init(Jep) method must be called after the function is added to the function table, which will recompile the function.
        Parameters:
        funName - name of the function
        parameters - an array of the formal parameter names used by the function
        expression -
      • MacroFunction

        public MacroFunction​(java.lang.String funName,
                             java.lang.String[] parameters,
                             java.lang.String expression,
                             Node root)
        Create a MacroFunction with a node tree. The ImportationVisitor is used to convert the tree into context for this object.
        Parameters:
        funName - function name
        parameters - list of parameters
        expression - string representation of equation
        root - root of expressions tree.
        Since:
        4.0
    • Method Detail

      • init

        public void init​(Jep j)
        The init method must be called after construction.
        Specified by:
        init in interface JepComponent
        Parameters:
        j - jep instance
        Throws:
        java.lang.RuntimeException - if errors compiling the expression.
      • getTopNode

        public Node getTopNode()
      • getParameterNames

        public java.lang.String[] getParameterNames()
      • getVars

        public Variable[] getVars()
        Get the internal variables used, these have specific names like 'fun::x'
        Returns:
        list of variables