Dear Gunther,

Thank you for the test code. I gradually changed it into my code that did not work, and found the problem:
    private static Expr[] parameterVars(FuncType funcType, QueryContext queryContext)
    {
      Expr[] paramVars = new Expr[funcType.argTypes.length];
      for (int i = 0; i < paramVars.length; ++i) {
        paramVars[i] = new VarRef(null, new VarScope().addNew(new QNm("arg"+i), funcType.argTypes[i], queryContext, null));
      }
      return paramVars;
    }
I was trying to be clever, and derive the parameter VarRefs from the function type. But this cannot get to the original parameter names, and I invented new names; new QNm("arg"+i). But these names are different from the original names, and somehow this means that in some cases there will be no parameters on the stack.

What is strange / interesting, is that with the above code, the following works:
let $ner-parse := ner:named-entity-recognition($grammar, map{})
return $input => $ner-parse()
But using a declared variable does not work:
declare variable $ner-parse as function(item()) as node()* := ner:named-entity-recognition($grammar,map{});
$input => $ner-parse()

Now I make sure I use the same names for the generated VarRefs, and my function is always called with the parameter values on the stack.

Thanks for your help!

Best regards,
Nico