SYNOPSIS
        mixed apply(closure cl, ...)

DESCRIPTION
        Evaluates the closure <cl>.
        If <cl> is not a closure, it will simply be returned (and all
        other arguments are ignored).

        One might wonder why there are two functions, funcall() and
        apply(), to perform the seemingly same job, namely evaluating
        a closure. Of course there is a subtle difference. If the last
        argument to apply() is an array, then each of its elements
        gets expanded to an additional paramater. The obvious use
        would be #'call_other as in:

        mixed eval(object ob,string func,mixed *args)
        {
          return apply(#'call_other,ob,func,args);
        }

        This will result in calling
        ob->func(args[0],args[1],...,args[sizeof(args)-1]).
        Using funcall() instead of apply() would have given us
        ob->func(args).

        One important application of apply() is the 'flattening' of
        the argument array received in varargs functions.

HISTORY
        Introduced in 3.2@70
        LDMud 3.2.8 adds the returning of a non-closure as first
        argument.

SEE ALSO
        funcall(E), closures(LPC), varargs(LPC)
