code: static
  	public Function getFunction(String name){
  
  		if(name == null){
  			return null;
  		} // End if
  
  		if(FunctionRegistry.functions.containsKey(name)){
  			Function function = FunctionRegistry.functions.get(name);
  
  			return function;
  		}
  
  		Class<?> functionClazz;
  
  		if(FunctionRegistry.functionClazzes.containsKey(name)){
  			functionClazz = FunctionRegistry.functionClazzes.get(name);
  		} else
  
  		{
  			functionClazz = loadFunctionClass(name);
  
  			FunctionRegistry.functionClazzes.put(name, functionClazz);
  		} // End if
  
  		if(functionClazz != null){
  			Function function;
  
  			try {
  				function = (Function)functionClazz.newInstance();
  			} catch(IllegalAccessException | InstantiationException | ExceptionInInitializerError e){
  				throw new EvaluationException("Function class " + PMMLException.formatKey(functionClazz.getName()) + " could not be instantiated")
  					.initCause(e);
  			}
  
  			return function;
  		}
  
  		return null;
  	}
docs: <p>
  Gets a function for a name.
  <p>
  
  <p>
  First, if the name is registered with a singleton function instance, returns that instance.
  After that, if the name represents a {@link Function} class on the application classpath, loads it, and returns a newly created instance.
  </p>