浏览代码

added more Haskell examples

Martin Thoma 11 年之前
父节点
当前提交
9fa7cdfea0

+ 21 - 2
documents/Programmierparadigmen/Haskell.tex

@@ -64,7 +64,7 @@ Zu lesen ist die Deklaration wie folgt:
 
 \todo[inline]{Gibt es Funktionsdeklarationen, die bis auf Wechsel des Namens und der Reihenfolge äquivalent sind?}
 
-\subsection{if / else}
+\subsection{if / else}\xindex{Haskell!if@\texttt{if}}
 Das folgende Beispiel definiert den Binomialkoeffizienten (vgl. \cref{bsp:binomialkoeffizient}):
 
 \inputminted[numbersep=5pt, tabsize=4]{haskell}{scripts/haskell/binomialkoeffizient.hs}
@@ -127,6 +127,21 @@ in etwa folgendem Haskell-Code:
     \inputminted[numbersep=5pt, tabsize=4]{haskell}{scripts/haskell/pythagorean-triples.hs}
 \end{beispiel}
 
+\begin{beispiel}[List-Comprehension]
+    Das folgende Beispiel zeigt, wie man die unendlich große Menge
+
+    \[\Set{p^i | p \text{ Primzahl}, 1 \leq i \leq n}\]
+
+    erstellt:
+
+    \inputminted[numbersep=5pt, tabsize=4]{haskell}{scripts/haskell/primepowers.hs}
+
+    Dabei ist die Reihenfolge wichtig. Würde man zuerst die \verb+i+ und dann
+    die Primzahlen notieren, würde Haskell versuchen erst alle Primzahlen durch
+    zu gehen. Da dies eine unendliche Liste ist, würde also niemals die zweite
+    Potenz einer Primzahl auftauchen.
+\end{beispiel}
+
 \subsection{Strings}
 \begin{itemize}
     \item Strings sind Listen von Zeichen:\\
@@ -155,7 +170,7 @@ folgenden Zeilen äquivalent:
 
 Das doppelte Plus (\texttt{++}) wird verwendet um Listen mit einander zu verbinden.
 
-\subsection{Logische Operatoren}
+\subsection{Logische Operatoren}\xindex{Haskell!Logische Operatoren}
 
 \begin{table}[H]
     \centering 
@@ -229,6 +244,10 @@ Haskell wertet Ausdrücke nur aus, wenn es nötig ist.
 \end{beispiel}
 
 \section{Beispiele}
+
+\subsection{Primzahlsieb}\xindex{Primzahlsieb}%
+\inputminted[linenos, numbersep=5pt, tabsize=4, frame=lines, label=primzahlsieb.hs]{haskell}{scripts/haskell/primzahlsieb.hs}
+
 \subsection{Quicksort}\xindex{filter (Haskell)@\texttt{filter} (Haskell)}%
 \inputminted[linenos, numbersep=5pt, tabsize=4, frame=lines, label=qsort.hs]{haskell}{scripts/haskell/qsort.hs}
 

二进制
documents/Programmierparadigmen/Programmierparadigmen.pdf


+ 1 - 0
documents/Programmierparadigmen/scripts/haskell/primepowers.hs

@@ -0,0 +1 @@
+let primepowers n = [p^i |p<-primes, i<-[1..n]]

+ 4 - 0
documents/Programmierparadigmen/scripts/haskell/primzahlsieb.hs

@@ -0,0 +1,4 @@
+primes::[Integer]
+primes = sieve [2..] where
+    sieve (p:xs) = p:sieve [x | x <- xs,
+                                x `mod` p > 0]