\begin{slide}{Lokale Bindungen}

konkret:
\begin{verbatim}
(let ((n1 x1) (n2 x2)) y)
\end{verbatim}

abstrakt:
\begin{verbatim}
data Exp = ...
| LocalBinding 
    { binders :: [ Binder ] , body :: Exp }
data Binder = 
   Binder { bname :: S.Id, bdefn  :: Exp } 
\end{verbatim}

Übersetzung in Applikation/Abstraktion

Was folgt daraus über Sichtbarkeiten?
\end{slide}

\begin{slide}{Lokale Bindungen (Übersetzung)}

Übersetzung in Multi-Applikation/Abstraktion
\begin{verbatim}
(let [(n1,x1),..,(nk,xk)] y)
   -> ((abs [n1,..,nk] y) x1 .. xk)
\end{verbatim}
  
Beachte: das geht nicht:
\begin{verbatim}
(let ((x (@+ 3 4)) (y (@* x x))) (@- x y))
\end{verbatim}
die \verb|x| in Definition von \verb|y| 
beziehen sich nicht auf das \verb|x| aus der ersten Definition

Abhilfe:
\begin{verbatim}
(let ((x (@+ 3 4))) 
     (let ((y (@* x x))) (@- x y)) )
\end{verbatim}

\end{slide}
