\section*{Aufgabe 1: Algorithmen per Hand durchführen}
\begin{enumerate}
\item Schreiben Sie die folgenden Gleichungen in umgekehrte polnische Notation um und lösen Sie per Hand:
\begin{enumerate}[label=(\roman*)]
\item$(9-3) + \log (8)$
\item$(10/4) - \sqrt{ 4 }$
\end{enumerate}
\item Verwenden Sie den Algorithmus aus der Vorlesung um per Hand zu überprüfen, ob \texttt{[]([({})[]])} und \texttt{[][()){}]} gültige Klammerausdrücke sind.
\end{enumerate}
\section*{Aufgabe 2: Module}
\begin{enumerate}
\item Erstellen Sie ein Modul \lstinline{Queue}, das den algebraischen Datentyp \lstinline{Queue} und die Funktionen \lstinline{isEmpty}, \lstinline{dequeue} und \lstinline{enqueue} exportiert. \par
Die fraglichen Funktionen sind unten angefügt, ansonsten soll das Beispiel aus dem Live-Code der Vorlesung (\lstinline{FQueue}) verwendet werden.\par
Ergänzen Sie die Funktionen
\begin{enumerate}[label=(\roman*)]
\item\lstinline{hasElem :: Queuelike a => b -> a b -> Bool}(überprüft ob der übergebene Wert in der \lstinline{Queue} enthalten ist)
\item\lstinline{count :: Queuelike a => b -> a b -> Int}(zählt wie oft der übergebene Wert in der \lstinline{Queue} enthalten ist)
%\item \haskell{getPenultimate :: Queue a -> Maybe a} (gibt den vorletzten Wert aus der \haskell{Queue} zurück)
%\item \haskell{hasElem :: a -> Queue a -> Bool} (überprüft ob der übergebene Wert in der \haskell{Queue} enthalten ist)
%\item\haskell{getDistanceToFront :: a -> Queue a -> Maybe Int} (bekommt ein Element und eine \haskell{Queue} und gibt zurück wie viele Elemente vor dem Element stehen)
\end{enumerate}
hinzu und exportieren Sie diese.
\item Importieren Sie das Modul in eine neue Haskelldatei und schreiben Sie folgende Funktionen, die eine Kassenschlange eines Einkaufsladens simulieren.
In der Schlange stellen Sie Personen mit Einkaufswägen an. Jeder Einkaufswagen enthält verschiedene Produkte mit zugeordneten Preisen.
\begin{enumerate}[label=(\roman*)]
\item Schreiben Sie passende Typsynonyme oder algebraische Datentypen, die einen Einkaufswagen und die Schlange von Einkaufswägen darstellen.
\item Schreiben Sie eine Funktion \lstinline{anstellen}, bei der ein Einkaufswagen in die Kassenschlange eingereiht wird.
\item Schreiben Sie eine Funktion \lstinline{kassieren}, bei der für den Einkaufswagen, der als erstes eingereiht wurde der Gesamtpreis der Waren bestimmt wird.
Die Rückgabe von \lstinline{kassieren} soll ein Tupel aus dem Gesamtpreis und der neuen Kassenschlange sein.
\end{enumerate}
\end{enumerate}
% /////////////////////// END DOKUMENT /////////////////////////