public void Run(IEnvironment env) { QueryFunction func = (parent, args) => { FunctionUtils.CheckArgumentCountEqual(Name, ArgumentNames.Length, args.Length); var fenv = new FunctionEnvironment(parent); for (int i = 0; i < ArgumentNames.Length; ++i) { fenv.CreateVariable(ArgumentNames[i], args[i]); } if (Statements != null) { foreach (var stm in Statements) { stm.Run(fenv); } } return FinalExpression.Evaluate(fenv); }; env.RegisterFunction(Name, func); }