\begin{slide}{Unterprogramme als Argumente}

\begin{verbatim}
static int d ( Func<int,int> g ) { 
    return g(g(1));              }
static int p (int x) {
    Func<int,int> f = y => x + y;
    return d (f);                }
\end{verbatim}

Betrachte Aufruf $p(3)$.

Das innere Unterprogramm $f$ muß auf den $p$-Frame zugreifen,
um den richtigen Wert des $x$ zu finden.

Dazu \emph{Closure} konstruieren: 
$f$ mit statischem Vorgänger.

Wenn Unterprogramme als Argumente übergeben werden,
steht der statische Vorgänger im Stack.

(ansonsten muß man den Vorgänger-Frame auf 
andere Weise retten, siehe später)

\end{slide}

