\begin{slide}{Erklärung CPS-Transformation}

Spezifikation (Vorsicht, enthält Typfehler - welche?):
\begin{verbatim}
    eval env x          (\ y -> k2 (k1 y)) 
=?= eval env (cps x k1) k2
\end{verbatim}

Wiederholung  CPS-Interpreter:
\begin{verbatim}
type Cont = Val -> Action Val
eval :: Env -> Exp -> Cont -> Action Val
eval env x = \ k -> case x of
    ConstInt i -> ... ; Plus a b -> ...
\end{verbatim}
CPS-Transformator:
\begin{verbatim}
type Cont = ExpValue -> Transform Exp
cps :: Exp -> Cont -> Transform Exp
cps x = \ m -> case x of
    ConstInt i -> ... ; Plus a b -> ...
\end{verbatim}

\end{slide}


\begin{slide}{Übung CPS-Transformation}

  \begin{itemize}
  \item Transformationsregeln für Ref, App, Abs, Let
    nachvollziehen (im Vergleich zu CPS-Interpreter)
  \item Transformationsregeln für if/then/else, new/put/get
    hinzufügen
  \item anwenden auf eine rekursive Funktion (z. B. Fakultät),

    wobei Rekursion durch Zeiger auf Abstraktion realisiert wird
  \end{itemize}

\end{slide}
