2
0
Fork 0
mirror of https://github.com/MartinThoma/LaTeX-examples.git synced 2025-04-26 06:48:04 +02:00

GeoTopo images for easier compiling; Lazy evalution; Logik

This commit is contained in:
Martin Thoma 2014-03-01 20:04:19 +01:00
parent 1eb807d278
commit 1938222321
11 changed files with 215 additions and 5 deletions

View file

@ -1,3 +1,4 @@
%!TEX root = Programmierparadigmen.tex
\chapter{Haskell}
\index{Haskell|(}
Haskell ist eine funktionale Programmiersprache, die von Haskell
@ -122,6 +123,28 @@ in etwa folgendem Haskell-Code:
\end{itemize}
\section{Typen}
\subsection{Standard-Typen}
Haskell kennt einige Basis-Typen:
\begin{itemize}
\item \textbf{Int}: Ganze Zahlen. Der Zahlenbereich kann je nach Implementierung variieren,
aber der Haskell-Standart garantiert, dass das Intervall
$[-2^{29}, 2^{29}-1]$ abgedeckt wird.
\item \textbf{Integer}: beliebig große ganze Zahlen
\item \textbf{Float}: Fließkommazahlen
\item \textbf{Double}: Fließkommazahlen mit doppelter Präzision
\item \textbf{Bool}: Wahrheitswerte
\item \textbf{Char}: Unicode-Zeichen
\end{itemize}
Des weiteren gibt es einige strukturierte Typen:
\begin{itemize}
\item Listen: z.~B. $[1,2,3]$
\item Tupel: z.~B. $(1,'a',2)$
\item Brüche (Fractional, RealFrac)
\item Summen-Typen: Typen mit mehreren möglichen Repräsentationen
\end{itemize}
\subsection{Typinferenz}
In Haskell werden Typen aus den Operationen geschlossfolgert. Dieses
Schlussfolgern der Typen, die nicht explizit angegeben werden müssen,
nennt man \textbf{Typinferent}\xindex{Typinferenz}.
@ -139,6 +162,18 @@ Ein paar Beispiele zur Typinferenz:
\label{fig:haskell-type-hierarchy}
\end{figure}
\section{Lazy Evaluation}\xindex{Lazy Evaluation}
Haskell wertet Ausdrücke nur aus, wenn es nötig ist.
\begin{beispiel}[Lazy Evaluation]
Obwohl der folgende Ausdruck einen Teilausdruck hat, der einen Fehler zurückgeben
würde, kann er aufgrund der Lazy Evaluation zu 2 evaluiert werden:
\inputminted[linenos, numbersep=5pt, tabsize=4, frame=lines, label=lazy-evaluation.hs]{haskell}{scripts/haskell/lazy-evaluation.hs}
\end{beispiel}
Ein spezialfall der Lazy-Evaluation ist die sog. \textit{Kurzschlussauswertung}.\xindex{Kurzschlussauswertung}\xindex{Short-circuit evaluation}
Das bezeichnet die Lazy-Evaluation von booleschen Ausdrücken.
\section{Beispiele}
\subsection{Quicksort}
\inputminted[linenos, numbersep=5pt, tabsize=4, frame=lines, label=qsort.hs]{haskell}{scripts/haskell/qsort.hs}
@ -163,7 +198,8 @@ sich das ganze sogar noch kürzer schreiben:
\inputminted[linenos, numbersep=5pt, tabsize=4, frame=lines, label=fibonacci-pattern-matching.hs]{haskell}{scripts/haskell/fibonacci-pattern-matching.hs}
\subsection{Quicksort}
\subsection{Funktionen höherer Ordnung}
\subsection{Funktionen höherer Ordnung}\xindex{Folds}\xindex{foldl}\xindex{foldr}\label{bsp:foldl-und-foldr}
\inputminted[linenos, numbersep=5pt, tabsize=4, frame=lines, label=folds.hs]{haskell}{scripts/haskell/folds.hs}
\section{Weitere Informationen}