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:
parent
1eb807d278
commit
1938222321
11 changed files with 215 additions and 5 deletions
|
@ -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}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue