diff --git a/documents/Programmierparadigmen/Arbeitszeit.md b/documents/Programmierparadigmen/Arbeitszeit.md index f4460fb..013a4d5 100644 --- a/documents/Programmierparadigmen/Arbeitszeit.md +++ b/documents/Programmierparadigmen/Arbeitszeit.md @@ -6,3 +6,4 @@ in dem Erstellen dieses Skripts steckt: |01.02.2014 | 13:30 - 13:45 | Thoma | Initialisierung; Grobe Struktur |01.02.2014 | 14:00 - 14:45 | Thoma | ASCII-Tabelle in C angefangen; Kapitel "Programmiersprachen" hinzugefügt; erste Definitionen |01.02.2014 | 14:45 - 15:30 | Thoma | Haskell angefangen +|01.02.2014 | 11:15 - 11:45 | Thoma | Haskell Class Hierachy diff --git a/documents/Programmierparadigmen/Haskell.tex b/documents/Programmierparadigmen/Haskell.tex index 9c29424..e24de2f 100644 --- a/documents/Programmierparadigmen/Haskell.tex +++ b/documents/Programmierparadigmen/Haskell.tex @@ -21,6 +21,16 @@ Haskell kann unter \href{http://www.haskell.org/platform/}{\path{www.haskell.org für alle Plattformen heruntergeladen werden. Unter Debian-Systemen ist das Paket \texttt{ghc} bzw. \texttt{haskell-platform} relevant. +\section{Typen} +Siehe \cref{fig:haskell-type-hierarchy}: + +\begin{figure}[htp] + \centering + \resizebox{0.9\linewidth}{!}{\input{figures/haskell-type-classes.tex}} + \caption{Hierarchie der Haskell Standardklassen} + \label{fig:haskell-type-hierarchy} +\end{figure} + \section{Syntax} \subsection{Klammern} Haskell verzichtet an vielen Stellen auf Klammern. So werden im diff --git a/documents/Programmierparadigmen/Programmierparadigmen.pdf b/documents/Programmierparadigmen/Programmierparadigmen.pdf index 3643841..85b424b 100644 Binary files a/documents/Programmierparadigmen/Programmierparadigmen.pdf and b/documents/Programmierparadigmen/Programmierparadigmen.pdf differ diff --git a/documents/Programmierparadigmen/Vorwort.tex b/documents/Programmierparadigmen/Vorwort.tex index 77a218e..1cee4fc 100644 --- a/documents/Programmierparadigmen/Vorwort.tex +++ b/documents/Programmierparadigmen/Vorwort.tex @@ -5,6 +5,18 @@ in der Klausur als Nachschlagewerk zu dienen; es soll jedoch auch vorher schon für die Vorbereitung genutzt werden können und nach der Klausur als Nachschlagewerk dienen. +Ein Link auf das Skript ist unter \href{http://martin-thoma.com/programmierparadigmen-klausur/}{\path{martin-thoma.com/programmierparadigmen-klausur/}} +zu finden. + +\section*{Anregungen, Verbesserungsvorschläge, Ergänzungen} +Noch ist das Skript im Aufbau. Es gibt viele Baustellen und es ist +fraglich, ob ich bis zur Klausur alles in guter Qualität bereitstellen +kann. Daher freue ich mich über jeden Verbesserungsvorschlag. + +Anregungen, Verbesserungsvorschläge und Ergänzungen können per +Pull-Request gemacht werden oder mir per Email an info@martin-thoma.de +geschickt werden. + \section*{Was ist Programmierparadigmen?} TODO @@ -13,3 +25,6 @@ TODO Grundlegende Kenntnisse vom Programmieren, insbesondere mit Java, wie sie am KIT in \enquote{Programmieren} vermittelt werden, werden vorausgesetzt. + +Die Unifikation wird wohl auch in \enquote{Formale Systeme} +erklärt; das könnte also hier von Vorteil sein. diff --git a/documents/Programmierparadigmen/figures/haskell-type-classes.tex b/documents/Programmierparadigmen/figures/haskell-type-classes.tex new file mode 100644 index 0000000..8934d7a --- /dev/null +++ b/documents/Programmierparadigmen/figures/haskell-type-classes.tex @@ -0,0 +1,36 @@ +\begin{tikzpicture} + \tikzstyle{node}=[ellipse,thick,fill=white,draw=black,inner sep=0pt,text width=3cm,align=center] + \tikzstyle{edge}=[->, ultra thick] + \matrix[row sep=0.5cm,column sep=0.5cm] { + \node[node] (Eq) {\textbf{Eq}\\All except IO, (->)}; & + \node[node] (Show) {\textbf{Show}\\All except IO, (->)}; & + \node[node] (Read) {\textbf{Read}\\All except IO, (->)}; \\ + \node[node] (Ord) {\textbf{Ord}\\All except IO, (->), IOError}; & + \node[node] (Num) {\textbf{Num}\\Int, Integer, Float, Double}; & + \node[node] (Bounded) {\textbf{Bounded}\\Int, Char, Bool, (), Ordering, tuples}; \\ + \node[node] (Enum) {\textbf{Enum}\\{\small (), Bool, Char, Ordering, Int, Integer, Float, Double}}; & + \node[node] (Real) {\textbf{Real}\\Int, Integer, Float, Double}; & + \node[node] (Fractional) {\textbf{Fractional}\\Float, Double}; \\ + \node[node] (Integral) {\textbf{Integral}\\Int, Integer}; & + \node[node] (RealFrac) {\textbf{RealFrac}\\Float, Double}; & + \node[node] (Floating) {\textbf{Floating}\\Float, Double}; \\ + \node[node] (Monad) {\textbf{Monad}\\IO, (), Maybe}; & + \node[node] (RealFloat) {\textbf{RealFloat}\\Float, Double}; & + \\ + \node[node] (MonadPlus) {\textbf{MonadPlus}\\IO, (), Maybe}; & + \node[node] (Functor) {\textbf{Functor}\\IO, (), Maybe}; & + \\ + }; + \draw[edge] (Eq) -- (Ord); + \draw[edge] (Eq) -- (Num); + \draw[edge] (Show) -- (Num); + \draw[edge] (Ord) -- (Real); + \draw[edge] (Num) -- (Real); + \draw[edge] (Num) -- (Fractional); + \draw[edge] (Enum) -- (Integral); + \draw[edge] (Real) -- (Integral); + \draw[edge] (Real) -- (RealFrac); + \draw[edge] (Floating) -- (RealFloat); + \draw[edge] (RealFrac) -- (RealFloat); + \draw[edge] (Monad) -- (MonadPlus); +\end{tikzpicture} diff --git a/tikz/haskell-type-classes/Makefile b/tikz/haskell-type-classes/Makefile new file mode 100644 index 0000000..a761781 --- /dev/null +++ b/tikz/haskell-type-classes/Makefile @@ -0,0 +1,31 @@ +SOURCE = haskell-type-classes +DELAY = 80 +DENSITY = 300 +WIDTH = 512 + +make: + pdflatex $(SOURCE).tex -output-format=pdf + make clean + +clean: + rm -rf $(TARGET) *.class *.html *.log *.aux *.data *.gnuplot + +gif: + pdfcrop $(SOURCE).pdf + convert -verbose -delay $(DELAY) -loop 0 -density $(DENSITY) $(SOURCE)-crop.pdf $(SOURCE).gif + make clean + +png: + make + make svg + inkscape $(SOURCE).svg -w $(WIDTH) --export-png=$(SOURCE).png + +transparentGif: + convert $(SOURCE).pdf -transparent white result.gif + make clean + +svg: + #inkscape $(SOURCE).pdf --export-plain-svg=$(SOURCE).svg + pdf2svg $(SOURCE).pdf $(SOURCE).svg + # Necessary, as pdf2svg does not always create valid svgs: + inkscape $(SOURCE).svg --export-plain-svg=$(SOURCE).svg diff --git a/tikz/haskell-type-classes/Readme.md b/tikz/haskell-type-classes/Readme.md new file mode 100644 index 0000000..a8a576d --- /dev/null +++ b/tikz/haskell-type-classes/Readme.md @@ -0,0 +1,3 @@ +Compiled example +---------------- +![Example](geometry-1.png) diff --git a/tikz/haskell-type-classes/haskell-type-classes.tex b/tikz/haskell-type-classes/haskell-type-classes.tex new file mode 100644 index 0000000..ce3b56a --- /dev/null +++ b/tikz/haskell-type-classes/haskell-type-classes.tex @@ -0,0 +1,42 @@ +\documentclass[varwidth=false, border=2pt]{standalone} +\usepackage{tikz} +\usetikzlibrary{shapes} + +\begin{document} +\begin{tikzpicture} + \tikzstyle{node}=[ellipse,thick,fill=white,draw=black,inner sep=0pt,text width=3cm,align=center] + \tikzstyle{edge}=[->, ultra thick] + \matrix[row sep=0.5cm,column sep=0.5cm] { + \node[node] (Eq) {\textbf{Eq}\\All except IO, (->)}; & + \node[node] (Show) {\textbf{Show}\\All except IO, (->)}; & + \node[node] (Read) {\textbf{Read}\\All except IO, (->)}; \\ + \node[node] (Ord) {\textbf{Ord}\\All except IO, (->), IOError}; & + \node[node] (Num) {\textbf{Num}\\Int, Integer, Float, Double}; & + \node[node] (Bounded) {\textbf{Bounded}\\Int, Char, Bool, (), Ordering, tuples}; \\ + \node[node] (Enum) {\textbf{Enum}\\{\small (), Bool, Char, Ordering, Int, Integer, Float, Double}}; & + \node[node] (Real) {\textbf{Real}\\Int, Integer, Float, Double}; & + \node[node] (Fractional) {\textbf{Fractional}\\Float, Double}; \\ + \node[node] (Integral) {\textbf{Integral}\\Int, Integer}; & + \node[node] (RealFrac) {\textbf{RealFrac}\\Float, Double}; & + \node[node] (Floating) {\textbf{Floating}\\Float, Double}; \\ + \node[node] (Monad) {\textbf{Monad}\\IO, (), Maybe}; & + \node[node] (RealFloat) {\textbf{RealFloat}\\Float, Double}; & + \\ + \node[node] (MonadPlus) {\textbf{MonadPlus}\\IO, (), Maybe}; & + \node[node] (Functor) {\textbf{Functor}\\IO, (), Maybe}; & + \\ + }; + \draw[edge] (Eq) -- (Ord); + \draw[edge] (Eq) -- (Num); + \draw[edge] (Show) -- (Num); + \draw[edge] (Ord) -- (Real); + \draw[edge] (Num) -- (Real); + \draw[edge] (Num) -- (Fractional); + \draw[edge] (Enum) -- (Integral); + \draw[edge] (Real) -- (Integral); + \draw[edge] (Real) -- (RealFrac); + \draw[edge] (Floating) -- (RealFloat); + \draw[edge] (RealFrac) -- (RealFloat); + \draw[edge] (Monad) -- (MonadPlus); +\end{tikzpicture} +\end{document}