com.singularsys.jep.misc

## Class MacroFunction

- java.lang.Object
- - com.singularsys.jep.functions.PostfixMathCommand
  - - com.singularsys.jep.misc.MacroFunction

- All Implemented Interfaces:
    JepComponent, PostfixMathCommandI, java.io.Serializable

      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 Summary

    Fields
    Modifier and Type | Field and Description
    --- | ---
    `protected Node` | `topNode`

    - ### Fields inherited from class com.singularsys.jep.functions.PostfixMathCommand

      `curNumberOfParameters, name, NaN, numberOfParameters`

  - ### Constructor Summary

    Constructors
    Constructor and Description
    `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.
    `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.
    `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.

  - ### Method Summary

    All Methods Instance Methods Concrete Methods
    Modifier and Type | Method and Description
    --- | ---
    `JepComponent` | `getLightWeightInstance()` Returns null
    `java.lang.String[]` | `getParameterNames()`
    `Node` | `getTopNode()`
    `Variable[]` | `getVars()` Get the internal variables used, these have specific names like 'fun::x'
    `void` | `init(Jep j)` The init method must be called after construction.
    `void` | `run(java.util.Stack<java.lang.Object> stack)` Calculates the value of the expression.
    `java.lang.String` | `toString()`

    - ### Methods inherited from class com.singularsys.jep.functions.PostfixMathCommand

      `asArray, asBool, asDouble, asInt, asLong, asStrictInt, asString, checkNumberOfParameters, getName, getNumberOfParameters, setCurNumberOfParameters, setName, toString`

    - ### Methods inherited from class java.lang.Object

      `clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait`

- - ### Field Detail

    - #### topNode

          protected transient Node topNode

  - ### 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` -

  - ### 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.

    - #### run

          public void run(java.util.Stack<java.lang.Object> stack)
                   throws EvaluationException

      Calculates the value of the expression.
      Specified by:
        `run` in interface `PostfixMathCommandI`
      Overrides:
        `run` in class `PostfixMathCommand`
      Parameters:
        `stack` - arguments for function
      Throws:
        `EvaluationException` - if the calculation cannot be performed

    - #### 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

    - #### toString

          public java.lang.String toString()

      Overrides:
        `toString` in class `PostfixMathCommand`

    - #### getLightWeightInstance

          public JepComponent getLightWeightInstance()

      Returns null
      Specified by:
        `getLightWeightInstance` in interface `JepComponent`
      Returns:
        either an new instance, or 'this'.

Copyright © 2018 Singular Systems http://www.singularsys.com/jep