\begin{slide}{Teilweise Auswertung}

  \begin{itemize}
  \item Interpreter (bisher): komplette Auswertung

    (Continuations sind Funktionen, werden angewendet)

  \item CPS-Transformator (heute): gar keine Auswertung,

    (Continuations sind Ausdrücke)

  \item gemischter Transformator: benutzt sowohl
    \begin{itemize}
    \item Continuations als Ausdrücke (der Zielsprache)
    \item als auch Continuations als Funktionen (der Gastsprache)
    \end{itemize}
    (compile time evaluation, partial evaluation)
  \end{itemize}


\end{slide}


\begin{slide}{Partial Evaluation}

  \begin{itemize} \itemsep 0pt
  \item bisher: 
\begin{verbatim}
transform  :: Exp -> State ... Exp
transform x = case x of ... 
 ConstInt i -> do 
  k<-fresh; return $ Abs k (app (Ref k) x)
\end{verbatim}
  \item jetzt: 
\begin{verbatim}
type Cont = Exp -> State ... Exp
transform  
    :: Exp -> ( Cont -> State ... Exp )
transform x k = case x of ... 
   ConstInt i -> k x
\end{verbatim}

  \end{itemize}
  
\end{slide}

\begin{slide}{Partial Evaluation (II)}


\begin{verbatim}
CPS[ (app f a1 ... an) ] =
(m-abs (K) 
  (m-app CPS[f] (m-abs (i_0) 
      ...
        (m-app CPS[an] (m-abs (i_n)
   ???     (app i_0 i_1 ... i_n k)))...)))))
\end{verbatim}
ändere letzte Zeile in
\begin{verbatim}
(let ((i (abs (temp) K[temp]))) 
     (app i_0 .. i_n i))
\end{verbatim}



\end{slide}
