Skip to content
Snippets Groups Projects
Verified Commit db8bcd3b authored by jonahbeneb02's avatar jonahbeneb02
Browse files

Add tut 15

parent 12f0c236
No related branches found
No related tags found
No related merge requests found
File added
% Original Template von Nicolas Lehman, angepasst von Wolfgang Mulzer und Katharina Klost
% Dokumentenklasse
\documentclass[
% globale Schriftgröße
10pt,
% setzt Absatzabstand hoch
parskip=half-,
% Format
paper=a4,
% lädt Sprachpakete
english,ngerman,
]{scrartcl}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
% //////////////////// Pakete laden ////////////////////
\usepackage{amsmath}
% modifiziert amsmath
\usepackage{mathtools}
% mathematische Symbole, für \ceckmarks
\usepackage{amssymb}
% für proof
\usepackage{amsthm}
% für \mathscr
\usepackage{mathrsfs}
\usepackage{latexsym}
% für bessere Worttrennung
\usepackage{microtype}
% Spracheinstellung
\usepackage[ngerman]{babel}
% für Quellcode
\usepackage{verbatim}
\usepackage{listings}
% für Umlaute und Sonderzeichen in der Tex-Datei
\usepackage[utf8]{inputenc}
\usepackage{graphicx}
% für Tabellen mit gleicher Spaltenbreite und automatischen Umbrüchen
\usepackage{tabularx}
\usepackage{fullpage}
% für multirow in tabulars
\usepackage{multirow}
\usepackage{rotate}
% um Farben zu benutzen, kann mehr als das Paket color
\usepackage[cmyk,table]{xcolor}
% Verlinkungen
\usepackage[
% farbige Schrift, statt farbiger Rahmen
colorlinks,
% verlinkt im Abb.Verzeichnis Seitenzahl statt Bildunterschrift
linktocpage,
% setzt Farbe der Links auf blau
linkcolor=blue
]{hyperref}
% nur für digitale Anwendungen, url = "http://www.example.com"
% für Webadressen wie e-mail usw.: "\url{http://www.example.com}"
\usepackage{url}
% für versch. Aufzählungszeichen wie z.B. a)
\usepackage{enumerate}
% folgt ein Leerzeichen nach einem \Befehl, wird es nicht verschluckt
\usepackage{xspace}
% für das Durchstreichen u.a. in Matheformeln mit \cancel
\usepackage{cancel}
% für \forloop und \whiledo
\usepackage{ifthen}
\usepackage{amsmath}
\usepackage{amssymb}
% //////////////////// Syntaxhervorhebung ////////////////////
\lstloadlanguages{Python, Haskell, [LaTeX]TeX, Java}
\lstset{%
% \scriptsize: die Fontgröße für den Quelltext
basicstyle=\footnotesize\ttfamily,
% legt Farbe der Box fest
backgroundcolor = \color{bgcolour},
% automatische Umbrüche nur nach Leerzeichen?
breakatwhitespace=false,
% automatische Zeilenumbrüche?
breaklines=true,
% die Überschrift steht oben, t = top
captionpos=t,
% Formatierung der Kommentare
commentstyle=\color{codeblue}\ttfamily,
% einfacher Rahmen um den Quelltext
frame=single,
% Behalte Leerzeichen im Quelltext. Nützlich, um
% Einrückungen zu erhalten (benötigt eventuell columns=flexible)
keepspaces=true,
% Formatierung der Schlüsselwörter
keywordstyle=\bfseries\ttfamily\color{codepurple},
% Wohin mit den Zeilennummern?
% mögliche Werte sind: none, left, right
numbers=left,
% Formatierung der Zeilennummern
numberstyle=\tiny\color{codegreen},
% Abstand zwischen Zeilennummern und Quelltext
numbersep=5pt,
% nummeriert nur jede i-te Zeile
stepnumber=1,
% Zeige alle Leerzeichen mit Hilfe von speziellen Unterstrichen;
% überschreibt 'showstringspaces'
showspaces=false,
% unterstreiche Leerzeichen nur in Zeichenketten
showstringspaces=false,
% Zeige Tabulatoren in Zeichenketten mit Hilfe von speziellen
% Unterstrichen
showtabs=false,
flexiblecolumns=false,
% Schrittweite zwischen Zeilennummern.
% Der Wert 1 bedeutet, dass jede Zeile nummeriert wird.
tabsize=1,
% Formatierung der Zeichenketten.
stringstyle=\color{orange}\ttfamily,
% leere Zeilen werden nicht nummeriert
numberblanklines=false,
% Abstand zum linken Seitenrand
xleftmargin=1.2em,
% Abstand zum rechten Seitenrand
xrightmargin=0.4em,
aboveskip=2ex,
}
\lstdefinestyle{py}{%
language=Python,
}
\lstdefinestyle{hs}{%
language=Haskell,
}
\lstdefinestyle{tex}{%
language=[LaTeX]TeX,
% Um LaTex im Quelltext einzufügen
escapeinside={\%*}{*)},
% Hervorhebung der TeX-Schlüsselwörter
texcsstyle=*\bfseries\color{blue},
morekeywords={*,$,\{,\},\[,\],lstinputlisting,includegraphics,
rowcolor,columncolor,listoffigures,lstlistoflistings,
subsection,subsubsection,textcolor,tableofcontents,colorbox,
fcolorbox,definecolor,cellcolor,url,linktocpage,subtitle,
subject,maketitle,usetikzlibrary,node,path,addbibresource,
printbibliography},
numbers=none,
numbersep=0pt,
xleftmargin=0.4em,
}
\lstdefinestyle{java}{%
language=Java,
extendedchars=true,
}
% füge einen x64-Assembler Dialekt hinzu
\lstdefinelanguage[x64]{Assembler}
% basiert auf dem "x86masm" Dialekt
[x86masm]{Assembler}
% zusätzliche Schlüsselwörter
{morekeywords={CDQE,CQO,CMPSQ,CMPXCHG16B,JRCXZ,LODSQ,MOVSXD, %
POPFQ,PUSHFQ,SCASQ,STOSQ,IRETQ,RDTSCP,SWAPGS, %
rax,rdx,rcx,rbx,rsi,rdi,rsp,rbp, %
r8,r8d,r8w,r8b,r9,r9d,r9w,r9b}
}
\lstset{%
language=Haskell,
literate={`}{\textasciigrave}1,
}
\lstdefinestyle{c}{
language=c,
extendedchars=true,
}
% //////////////////// eigene Anweisungen ////////////////////
% benötigt package xspace
\newcommand\FU{Freie Universität Berlin\xspace}
% Schreibt Befehl \dh in \dhALT um
\let\dhALT\dh
%renew überschreibt command \dh
\renewcommand\dh{d.\,h.\xspace}
\newcommand{\from}{\ensuremath{\colon}}
\newcommand{\floor}[1]{\lfloor{#1}\rfloor}
\newcommand{\ceil}[1]{\lceil{#1}\rceil}
\newcommand{\abbrev}[2]{\expandafter\newcommand\csname
#1\endcsname{#2\xspace}}
\newcommand{\cclasss}[2]{\abbrev{#1}{\textsf{#2}}}
\newcommand{\cclass}[1]{\cclasss{#1}{#1}}
\cclasss{ccP}{P}
\cclass{NP}
\cclass{LOGSPACE}
\cclass{NL}
% //////////////// mathematische Funktionen ////////////////////
\DeclareMathOperator{\True}{True}
\DeclareMathOperator{\False}{False}
% //////////////////// eigene Theoreme ////////////////////
\newtheorem{theorem}{Satz}
\newtheorem{corollary}[theorem]{Korollar}
\newtheorem{lemma}[theorem]{Lemma}
\newtheorem{observation}[theorem]{Beobachtung}
\newtheorem{definition}[theorem]{Definition}
\newtheorem{Literatur}[theorem]{Literatur}
% konfiguriert proof
\makeatletter
\newenvironment{Proof}[1][\proofname]{\par
\pushQED{\qed}%
\normalfont \topsep6\p@\@plus6\p@\relax
\trivlist
\item[\hskip\labelsep
\bfseries
#1\@addpunct{.}]\ignorespaces
}{%
\popQED\endtrivlist\@endpefalse
}
\makeatother
% //////////////////// eigene Farben ////////////////////
\let\definecolor=\xdefinecolor
\definecolor{FUgreen}{RGB}{153,204,0}
\definecolor{FUblue}{RGB}{0,51,102}
\definecolor{middlegray}{rgb}{0.5,0.5,0.5}
\definecolor{lightgray}{rgb}{0.8,0.8,0.8}
\definecolor{orange}{rgb}{0.8,0.3,0.3}
\definecolor{azur}{rgb}{0,0.7,1}
\definecolor{yac}{rgb}{0.6,0.6,0.1}
\definecolor{Pink}{rgb}{1,0,0.6}
\definecolor{bgcolour}{rgb}{0.97,0.97,0.97}
\definecolor{codegreen}{rgb}{0,0.6,0}
\definecolor{codegray}{rgb}{0.35,0.35,0.35}
\definecolor{codepurple}{rgb}{0.58,0,0.82}
\definecolor{codeblue}{rgb}{0.4,0.5,1}
% //////////////////// eigene Einstellungen ////////////////////
% verhindert Einrückung der 1. Zeile eines Absatzes
\parindent 0pt
% <-- Nummer des Übungszettels
\newcommand{\ubungNo}{15}
% <-- Name der Lehrveranstaltung eintragen
\newcommand{\veranstaltung}{Functional Programming}
% <-- z.B. SoSo 17, WiSe 17/18
\newcommand{\semester}{WiSe 23/24}
% https://tex.stackexchange.com/a/117538
\renewcommand\lstlistingname{Beispiel}
% /////////////////////// BEGIN DOKUMENT /////////////////////////
\begin{document}
\setkomafont{section}{\large}
% ////////////// Daten //////////////
\begin{center}
{\veranstaltung, \semester}\par
{\Large Tutorial Tasks \ubungNo}\par
\end{center}
\vspace{-3ex} % Abstand
\rule{\linewidth}{0.8pt} % horizontale Linie
\vspace{-3ex} % Abstand
\section*{Normalformen}
\begin{enumerate}
\item Wann ist ein Ausdruck in schwacher Normalform?
\item Werten Sie die folgenden Ausdrücke erst zur schwachen Normalform, dann zur Normalform aus.
\begin{enumerate}
\item \lstinline[language=Haskell]{ filter (>2) [1,2,3,4] }
\item \lstinline[language=Haskell]{ [12,56,23,31] }
\item \lstinline[language=Haskell]{ [(4*2, "a" ++"gef"), (5*2, "foo")] }
\end{enumerate}
\end{enumerate}
\section*{Partielle Auswertung}
Die folgenden Funktionssignaturen sind gegeben:
\begin{lstlisting}[language=Haskell]
snd :: (a, b) -> b
foldl :: Foldable t => (b -> a -> b) -> b -> t a -> b
filter :: (a -> Bool) -> [a] -> [a]
\end{lstlisting}
\begin{lstlisting}[language=Haskell]
g acc@((n, _):xs) x = (n + 1, x):acc
g [] x = [(0, x)]
f p = filter (p . snd) . foldl g []
\end{lstlisting}
\begin{enumerate}
\item Finden sie die Funktionssignatur von f
\item Wie viele Argumente hätte dann \lstinline{ f (>2) }?
\item Was ist die Funktionssignatur von \lstinline{ f (>2) }?
\end{enumerate}
\section*{Funktionen höherer Ordnung}
Welche vordefinierte Funktion passt zu diesem Problem?
\begin{enumerate}
\item Die Eingabe und Ausgabe sind Listen. Es müssen nicht mehrere Elemente Gleichzeitig betrachtet werden. Die Ausgabe ist immer genau so lang wie die Eingabe.
\item Die Eingabe ist eine Liste. Jeder Schritt baut auf dem vorherigen Ergebnis auf.
\end{enumerate}
\section*{Korrektheitsbeweise}
Betrachten Sie die folgenden Definitionen:
\begin{lstlisting}[language=Haskell]
reverse [] = [] -- reverse.1
reverse (x:xs) = reverse xs ++ [x] -- reverse.2
map f [] = [] -- map.1
map f (x:xs) = f x : (map f xs) -- map.2
(.) f g x = f (g x) -- (.)
map f (xs++ys) = map f xs ++ map f ys -- hE
\end{lstlisting}
Zeigen Sie mittels struktureller Induktion, dass \lstinline [language=Haskell]{reverse . map f = map f . reverse}
gilt.
\section*{Laufzeitanalyse}
Analysieren Sie die Laufzeit der Funktion \lstinline{t}. Geben Sie eine möglichst genaue obere
Schranke für die Laufzeit an.
\begin{lstlisting}[language=Haskell]
pairs xs = [(a,b) | a <- xs, b <- xs]
t :: [a] -> [a]
t xs = help (pairs xs)
where
help [] = []
help (p:ps) = help ps ++ [p]
\end{lstlisting}
\section*{Pattern Matching / Bäume}
Die folgende Datenstruktur kann einen Ausdruck aus der Mengenleere darstellen
\begin{lstlisting}[language=Haskell]
data Set = Union Set Set | Intersection Set Set | Complement Set | Set Char deriving Show
\end{lstlisting}
Schreiben Sie eine Funktion, die die De-Morganschen Regeln auf einen Ausdruck andwenden kann.
\begin{align*}
(A \cup B)^\complement = A^\complement \cap B^\complement \\
(A \cap B)^\complement = A^\complement \cup B^\complement
\end{align*}
Beispielausdrücke: \\
\lstinline[language=Haskell]{ deMorgan (Complement (Union (Set 'A') (Set 'B')))}, \\ \lstinline[language=Haskell]{ deMorgan (Complement (Intersection (Set 'A') (Set 'B'))) }
% /////////////////////// END DOKUMENT /////////////////////////
\end{document}
File added
% Original Template von Nicolas Lehman, angepasst von Wolfgang Mulzer und Katharina Klost
% Dokumentenklasse
\documentclass[
% globale Schriftgröße
10pt,
% setzt Absatzabstand hoch
parskip=half-,
% Format
paper=a4,
% lädt Sprachpakete
english,ngerman,
]{scrartcl}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
% //////////////////// Pakete laden ////////////////////
\usepackage{amsmath}
% modifiziert amsmath
\usepackage{mathtools}
% mathematische Symbole, für \ceckmarks
\usepackage{amssymb}
% für proof
\usepackage{amsthm}
% für \mathscr
\usepackage{mathrsfs}
\usepackage{latexsym}
% für bessere Worttrennung
\usepackage{microtype}
% Spracheinstellung
\usepackage[ngerman]{babel}
% für Quellcode
\usepackage{verbatim}
\usepackage{listings}
% für Umlaute und Sonderzeichen in der Tex-Datei
\usepackage[utf8]{inputenc}
\usepackage{graphicx}
% für Tabellen mit gleicher Spaltenbreite und automatischen Umbrüchen
\usepackage{tabularx}
\usepackage{fullpage}
% für multirow in tabulars
\usepackage{multirow}
\usepackage{rotate}
% um Farben zu benutzen, kann mehr als das Paket color
\usepackage[cmyk,table]{xcolor}
% Verlinkungen
\usepackage[
% farbige Schrift, statt farbiger Rahmen
colorlinks,
% verlinkt im Abb.Verzeichnis Seitenzahl statt Bildunterschrift
linktocpage,
% setzt Farbe der Links auf blau
linkcolor=blue
]{hyperref}
% nur für digitale Anwendungen, url = "http://www.example.com"
% für Webadressen wie e-mail usw.: "\url{http://www.example.com}"
\usepackage{url}
% für versch. Aufzählungszeichen wie z.B. a)
\usepackage{enumerate}
% folgt ein Leerzeichen nach einem \Befehl, wird es nicht verschluckt
\usepackage{xspace}
% für das Durchstreichen u.a. in Matheformeln mit \cancel
\usepackage{cancel}
% für \forloop und \whiledo
\usepackage{ifthen}
\usepackage{amsmath}
\usepackage{amssymb}
% //////////////////// Syntaxhervorhebung ////////////////////
\lstloadlanguages{Python, Haskell, [LaTeX]TeX, Java}
\lstset{%
% \scriptsize: die Fontgröße für den Quelltext
basicstyle=\footnotesize\ttfamily,
% legt Farbe der Box fest
backgroundcolor = \color{bgcolour},
% automatische Umbrüche nur nach Leerzeichen?
breakatwhitespace=false,
% automatische Zeilenumbrüche?
breaklines=true,
% die Überschrift steht oben, t = top
captionpos=t,
% Formatierung der Kommentare
commentstyle=\color{codeblue}\ttfamily,
% einfacher Rahmen um den Quelltext
frame=single,
% Behalte Leerzeichen im Quelltext. Nützlich, um
% Einrückungen zu erhalten (benötigt eventuell columns=flexible)
keepspaces=true,
% Formatierung der Schlüsselwörter
keywordstyle=\bfseries\ttfamily\color{codepurple},
% Wohin mit den Zeilennummern?
% mögliche Werte sind: none, left, right
numbers=left,
% Formatierung der Zeilennummern
numberstyle=\tiny\color{codegreen},
% Abstand zwischen Zeilennummern und Quelltext
numbersep=5pt,
% nummeriert nur jede i-te Zeile
stepnumber=1,
% Zeige alle Leerzeichen mit Hilfe von speziellen Unterstrichen;
% überschreibt 'showstringspaces'
showspaces=false,
% unterstreiche Leerzeichen nur in Zeichenketten
showstringspaces=false,
% Zeige Tabulatoren in Zeichenketten mit Hilfe von speziellen
% Unterstrichen
showtabs=false,
flexiblecolumns=false,
% Schrittweite zwischen Zeilennummern.
% Der Wert 1 bedeutet, dass jede Zeile nummeriert wird.
tabsize=1,
% Formatierung der Zeichenketten.
stringstyle=\color{orange}\ttfamily,
% leere Zeilen werden nicht nummeriert
numberblanklines=false,
% Abstand zum linken Seitenrand
xleftmargin=1.2em,
% Abstand zum rechten Seitenrand
xrightmargin=0.4em,
aboveskip=2ex,
}
\lstdefinestyle{py}{%
language=Python,
}
\lstdefinestyle{hs}{%
language=Haskell,
}
\lstdefinestyle{tex}{%
language=[LaTeX]TeX,
% Um LaTex im Quelltext einzufügen
escapeinside={\%*}{*)},
% Hervorhebung der TeX-Schlüsselwörter
texcsstyle=*\bfseries\color{blue},
morekeywords={*,$,\{,\},\[,\],lstinputlisting,includegraphics,
rowcolor,columncolor,listoffigures,lstlistoflistings,
subsection,subsubsection,textcolor,tableofcontents,colorbox,
fcolorbox,definecolor,cellcolor,url,linktocpage,subtitle,
subject,maketitle,usetikzlibrary,node,path,addbibresource,
printbibliography},
numbers=none,
numbersep=0pt,
xleftmargin=0.4em,
}
\lstdefinestyle{java}{%
language=Java,
extendedchars=true,
}
% füge einen x64-Assembler Dialekt hinzu
\lstdefinelanguage[x64]{Assembler}
% basiert auf dem "x86masm" Dialekt
[x86masm]{Assembler}
% zusätzliche Schlüsselwörter
{morekeywords={CDQE,CQO,CMPSQ,CMPXCHG16B,JRCXZ,LODSQ,MOVSXD, %
POPFQ,PUSHFQ,SCASQ,STOSQ,IRETQ,RDTSCP,SWAPGS, %
rax,rdx,rcx,rbx,rsi,rdi,rsp,rbp, %
r8,r8d,r8w,r8b,r9,r9d,r9w,r9b}
}
\lstset{%
language=Haskell,
literate={`}{\textasciigrave}1,
}
\lstdefinestyle{c}{
language=c,
extendedchars=true,
}
% //////////////////// eigene Anweisungen ////////////////////
% benötigt package xspace
\newcommand\FU{Freie Universität Berlin\xspace}
% Schreibt Befehl \dh in \dhALT um
\let\dhALT\dh
%renew überschreibt command \dh
\renewcommand\dh{d.\,h.\xspace}
\newcommand{\from}{\ensuremath{\colon}}
\newcommand{\floor}[1]{\lfloor{#1}\rfloor}
\newcommand{\ceil}[1]{\lceil{#1}\rceil}
\newcommand{\abbrev}[2]{\expandafter\newcommand\csname
#1\endcsname{#2\xspace}}
\newcommand{\cclasss}[2]{\abbrev{#1}{\textsf{#2}}}
\newcommand{\cclass}[1]{\cclasss{#1}{#1}}
\cclasss{ccP}{P}
\cclass{NP}
\cclass{LOGSPACE}
\cclass{NL}
% //////////////// mathematische Funktionen ////////////////////
\DeclareMathOperator{\True}{True}
\DeclareMathOperator{\False}{False}
% //////////////////// eigene Theoreme ////////////////////
\newtheorem{theorem}{Satz}
\newtheorem{corollary}[theorem]{Korollar}
\newtheorem{lemma}[theorem]{Lemma}
\newtheorem{observation}[theorem]{Beobachtung}
\newtheorem{definition}[theorem]{Definition}
\newtheorem{Literatur}[theorem]{Literatur}
% konfiguriert proof
\makeatletter
\newenvironment{Proof}[1][\proofname]{\par
\pushQED{\qed}%
\normalfont \topsep6\p@\@plus6\p@\relax
\trivlist
\item[\hskip\labelsep
\bfseries
#1\@addpunct{.}]\ignorespaces
}{%
\popQED\endtrivlist\@endpefalse
}
\makeatother
% //////////////////// eigene Farben ////////////////////
\let\definecolor=\xdefinecolor
\definecolor{FUgreen}{RGB}{153,204,0}
\definecolor{FUblue}{RGB}{0,51,102}
\definecolor{middlegray}{rgb}{0.5,0.5,0.5}
\definecolor{lightgray}{rgb}{0.8,0.8,0.8}
\definecolor{orange}{rgb}{0.8,0.3,0.3}
\definecolor{azur}{rgb}{0,0.7,1}
\definecolor{yac}{rgb}{0.6,0.6,0.1}
\definecolor{Pink}{rgb}{1,0,0.6}
\definecolor{bgcolour}{rgb}{0.97,0.97,0.97}
\definecolor{codegreen}{rgb}{0,0.6,0}
\definecolor{codegray}{rgb}{0.35,0.35,0.35}
\definecolor{codepurple}{rgb}{0.58,0,0.82}
\definecolor{codeblue}{rgb}{0.4,0.5,1}
% //////////////////// eigene Einstellungen ////////////////////
% verhindert Einrückung der 1. Zeile eines Absatzes
\parindent 0pt
% <-- Nummer des Übungszettels
\newcommand{\ubungNo}{15}
% <-- Name der Lehrveranstaltung eintragen
\newcommand{\veranstaltung}{Functional Programming}
% <-- z.B. SoSo 17, WiSe 17/18
\newcommand{\semester}{WiSe 23/24}
% https://tex.stackexchange.com/a/117538
\renewcommand\lstlistingname{Beispiel}
% /////////////////////// BEGIN DOKUMENT /////////////////////////
\begin{document}
\setkomafont{section}{\large}
% ////////////// Daten //////////////
\begin{center}
{\veranstaltung, \semester}\par
{\Large Tutorial Tasks \ubungNo}\par
\end{center}
\vspace{-3ex} % Abstand
\rule{\linewidth}{0.8pt} % horizontale Linie
\vspace{-3ex} % Abstand
\section*{Normal Forms}
\begin{enumerate}
\item When is an expression in weak head normal form?
\item Evaluate the following expressions to weak head normal form and normal form:
\begin{enumerate}
\item \lstinline[language=Haskell]{ filter (>2) [1,2,3,4] }
\item \lstinline[language=Haskell]{ [12,56,23,31] }
\item \lstinline[language=Haskell]{ [(4*2, "a" ++"gef"), (5*2, "foo")] }
\end{enumerate}
\end{enumerate}
\section*{Partial evaluation}
The following function signatures are given:
\begin{lstlisting}[language=Haskell]
snd :: (a, b) -> b
foldl :: Foldable t => (b -> a -> b) -> b -> t a -> b
filter :: (a -> Bool) -> [a] -> [a]
\end{lstlisting}
\begin{lstlisting}[language=Haskell]
g acc@((n, _):xs) x = (n + 1, x):acc
g [] x = [(0, x)]
f p = filter (p . snd) . foldl g []
\end{lstlisting}
\begin{enumerate}
\item Find the function signature of f
\item How many arguments does \lstinline{ f (>2) } have?
\item What is the function signature of \lstinline{ f (>2) }?
\end{enumerate}
\section*{Higher Order Functions}
Which function from the Prelude first this problem?
\begin{enumerate}
\item Input and Output are lists. It is not necessary to have access to multiple list elements at the same time.
\item The input is a list. Every step depends on the result of the previous step.
\end{enumerate}
\section*{Structural Induction}
Consider the following definitions:
\begin{lstlisting}[language=Haskell]
reverse [] = [] -- reverse.1
reverse (x:xs) = reverse xs ++ [x] -- reverse.2
map f [] = [] -- map.1
map f (x:xs) = f x : (map f xs) -- map.2
(.) f g x = f (g x) -- (.)
map f (xs++ys) = map f xs ++ map f ys -- hE
\end{lstlisting}
Proof \lstinline [language=Haskell]{reverse . map f = map f . reverse} by structural induction.
\section*{Complexity analysis}
Analyze the runtime complexity of the function \lstinline{t}. Specify a an upper bound as precisely as possible.
\begin{lstlisting}[language=Haskell]
pairs xs = [(a,b) | a <- xs, b <- xs]
t :: [a] -> [a]
t xs = help (pairs xs)
where
help [] = []
help (p:ps) = help ps ++ [p]
\end{lstlisting}
\section*{Pattern Matching / Trees}
The following data structure can represent an expression from set theory:
\begin{lstlisting}[language=Haskell]
data Set = Union Set Set | Intersection Set Set | Complement Set | Set Char deriving Show
\end{lstlisting}
Write a function that applies De Morgan's laws to such an expression.
De Morgan's laws are defined as follows:
\begin{align*}
(A \cup B)^\complement = A^\complement \cap B^\complement \\
(A \cap B)^\complement = A^\complement \cup B^\complement
\end{align*}
Example expressions: \\
\lstinline[language=Haskell]{ deMorgan (Complement (Union (Set 'A') (Set 'B')))}, \\ \lstinline[language=Haskell]{ deMorgan (Complement (Intersection (Set 'A') (Set 'B'))) }
% /////////////////////// END DOKUMENT /////////////////////////
\end{document}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment