SYNOPSIS
        mixed apply(closure cl, ...)

DESCRIPTION
        Evaluates the closure <cl> with the following arguments.
        If the last argument is an array or struct, it will be
        flattened: ie. the array/struct itself will be removed and its
        contents added to the argument list of <cl>

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

EXAMPLES
        The flattening of the last argument is the important difference
        between apply() and funcall(). For example:

        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).


        Of course, with the '...' operator we could also write

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

        and achieve the same result.

HISTORY
        Introduced in 3.2@70
        LDMud 3.2.8 adds the returning of a non-closure as first
        argument.
        LDMud 3.3 added the '...' operator and thus made apply() in fact
        redundant.
        LDMud 3.3.266 added support for structs.

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