Class CurriedFunction

java.lang.Object
net.sf.saxon.functions.AbstractFunction
net.sf.saxon.functions.hof.CurriedFunction
All Implemented Interfaces:
Callable, FunctionItem, GroundedValue, Item, Sequence

public class CurriedFunction extends AbstractFunction
A function obtained by currying another function: that is, the result of a partial function application
  • Constructor Details

    • CurriedFunction

      public CurriedFunction(FunctionItem targetFunction, Sequence[] boundValues, int[] unboundArgMap)
      Create a curried (or partially applied) function
      Parameters:
      targetFunction - the base function to be curried
      boundValues - the values to which the arguments are to be bound, representing unbound values (placeholders) by null. So if the arguments are (4, ?, 5) then this array will be [4, null, 5]. If keywords are used in the call then they will have been resolved to argument positions. The values supplied must conform to the required type: coercion is the responsibility of the caller.
      unboundArgMap - for unbound arguments (placeholders), mapping from argument positions in the curried function to argument positions in the target function. If the arguments are (4, ?, 5) then this array will be [1], indicating that the first and only argument in the curried function is bound to the second (position==1) argument in the underlying function. If keywords are used in the call then this mapping may be non-trivial; for example if the base function is f(x,y) and the partial function application is f(y:=?, x:=?), then this array will contain [1,0]. The length of this array is equal to the arity of the curried function.
  • Method Details

    • getFunctionItemType

      public FunctionItemType getFunctionItemType()
      Get the item type of the function item
      Returns:
      the function item's type
    • getFunctionName

      public StructuredQName getFunctionName()
      Get the name of the function, or null if it is anonymous
      Returns:
      the function name, or null for an anonymous inline function
    • getDescription

      public String getDescription()
      Get a description of this function for use in error messages. For named functions, the description is the function name (as a lexical QName). For others, it might be, for example, "inline function", or "partially-applied ends-with function".
      Returns:
      a description of the function for use in error messages
    • getArity

      public int getArity()
      Get the arity of the function (equal to the number of placeholders)
      Returns:
      the number of arguments in the function signature
    • getAnnotations

      public AnnotationList getAnnotations()
      Get the function annotations (as defined in XQuery). Returns an empty list if there are no function annotations. The function annotations on a partially applied function are the same as the annotations on its base function.
      Specified by:
      getAnnotations in interface FunctionItem
      Overrides:
      getAnnotations in class AbstractFunction
      Returns:
      the function annotations
    • call

      public Sequence call(XPathContext context, Sequence[] args) throws XPathException
      Invoke the function
      Parameters:
      context - the XPath dynamic evaluation context
      args - the actual arguments to be supplied
      Returns:
      the result of invoking the function
      Throws:
      XPathException - if the function reports a dynamic error
    • export

      public void export(ExpressionPresenter out) throws XPathException
      Output information about this function item
      Specified by:
      export in interface FunctionItem
      Overrides:
      export in class AbstractFunction
      Parameters:
      out - the destination to write to
      Throws:
      XPathException - if things go wrong