SYNOPSIS
        mixed apply(closure cl, mixed arg, ...)

BESCHREIBUNG
        Wertet die Closure <cl> aus. Wenn <cl> keine Closure ist, wird <cl>
        unveraendert zurueck geliefert und alle Argumente <arg> werden
        ignoriert.

        Es gibt einen kleinen Unterschied zu funcall(), das ja im Wesentlichen
        das gleiche tut (naemlich, eine Closure auswerten): wenn das letzte
        Argument von apply() ein Array ist, wird jedes Element dieses Arrays
        zu einem separaten zusaetzlichen Parameter der Closure umgewandelt.

        Eine moegliche Anwendung waere:
            mixed eval(object ob,string func,mixed *args)
            {
                return apply(#'call_other,ob,func,args);
            }

        Das fuehrt zu folgenden Aufrufen:
            ob->func(args[0],args[1],...,args[sizeof(args)-1])

        Waere stattdessen funcall() aufgerufen worden, so haette das ergeben:
            ob->func(args)

        Eine wichtige Anwendung von apply() ist das Auswerten des
        Array-Arguments in "varargs" Funktionen.

GESCHICHTE
        Eingefuehrt in 3.2@70.
        LDMud 3.2.8 fuehrte ein, dass das erste Argument zurueck gegeben wird,
            wenn es sich nicht um eine Closure handelt.

SIEHE AUCH
        funcall(E), closures(LPC), varargs(LPC)
