Przeglądaj źródła

Added Scala example

Martin Thoma 11 lat temu
rodzic
commit
7e76256e4e

+ 4 - 0
documents/Programmierparadigmen/C.tex

@@ -117,5 +117,9 @@ Speichere den folgenden Text als \texttt{hello-world.c}:
 Compiliere ihn mit \texttt{gcc hello-world.c}. Es wird eine ausführbare
 Datei namens \texttt{a.out} erzeugt.
 
+\subsection{Pointer}
+\inputminted[linenos, numbersep=5pt, tabsize=4]{c}{scripts/c/pointer.c}
+
+Die Ausgabe hier ist \texttt{0 3}.
 \index{C|)}
 

+ 4 - 4
documents/Programmierparadigmen/Haskell.tex

@@ -162,16 +162,16 @@ Ein paar Beispiele zur Typinferenz:
     \label{fig:haskell-type-hierarchy}
 \end{figure}
 
-\subsection{type}
+\subsection{type}\xindex{type}%
 Mit \texttt{type} können Typsynonyme erstellt werden:
 
-\inputminted[linenos, numbersep=5pt, tabsize=4]{haskell}{scripts/haskell/alt-types.hs}
+\inputminted[numbersep=5pt, tabsize=4]{haskell}{scripts/haskell/alt-types.hs}
 
-\subsection{data}
+\subsection{data}\xindex{data}%
 Mit dem Schlüsselwort \texttt{data} können algebraische Datentypen\xindex{Datentyp!algebraischer}
 erzeugt werden:
 
-
+\inputminted[numbersep=5pt, tabsize=4]{haskell}{scripts/haskell/data-example.hs}
 
 \section{Lazy Evaluation}\xindex{Lazy Evaluation}
 Haskell wertet Ausdrücke nur aus, wenn es nötig ist.

BIN
documents/Programmierparadigmen/Programmierparadigmen.pdf


+ 14 - 0
documents/Programmierparadigmen/Scala.tex

@@ -46,6 +46,7 @@ einige Unterschiede.
     \item Java hat primitive Typen, Scala ausschließlich Objekte.
     \item Scala benötigt kein \texttt{;} am Ende von Anweisungen.
     \item Scala ist kompakter.
+    \item Java hat \texttt{static}, Scala hat \texttt{object} (Singleton)
 \end{itemize}
 }
 
@@ -75,7 +76,20 @@ Listen können erstellt und durchgegangen werden:
 
 \inputminted[numbersep=5pt, tabsize=4]{scala}{scripts/scala/extended-for.scala}
 
+\section{Companion Object}\xindex{Companion Object}
+Ein Companion Object ist ein Objekt mit dem Namen einer Klasse oder eines Traits.
+Im Gegensatz zu anderen Objekten / Traits hat das Companion Object zugriff auf
+die Klasse.
+
+\section{actor}\xindex{actor}
+actor dient der Concurrency.
+
 \section{Beispiele}
+\subsection{Wetter}
+Das folgende Script sendet parallel Anfragen über verschiedene ZIP-Codes an
+die Yahoo-Server, parst das XML und extrahiert die Stadt sowie die Temperatur:
+
+\inputminted[linenos, numbersep=5pt, tabsize=4, frame=lines, label=weather.scala]{scala}{scripts/scala/weather.scala}
 
 \section{Weitere Informationen}
 \begin{itemize}

+ 8 - 0
documents/Programmierparadigmen/scripts/c/pointer.c

@@ -0,0 +1,8 @@
+#include <stdio.h>
+
+int arr[] = {0,1,2,3,4,5};
+
+int main() {
+    printf("%i %i", arr[0], (&arr[3])[0]);
+    return 0;
+}

+ 2 - 1
documents/Programmierparadigmen/scripts/haskell/alt-types.hs

@@ -1,4 +1,5 @@
 type Prename = String
 type Age = Double
 type Person = (Prename, Age)
-type Friends = [Person]
+type Friends = [Person]
+type Polynom = [Double]

+ 4 - 0
documents/Programmierparadigmen/scripts/haskell/data-example.hs

@@ -0,0 +1,4 @@
+data Bool   = False | True
+data Color  = Red | Green | Blue | Indigo | Violet
+data Tree a = Leaf a | Branch (Tree a) (Tree a)
+data Point = Point Float Float deriving (Show)

+ 24 - 0
documents/Programmierparadigmen/scripts/scala/weather.scala

@@ -0,0 +1,24 @@
+import scala.io._
+import scala.xml.{Source => Source2, _}
+import scala.actors._
+import Actor._
+
+def getWeatherInfo(woeid: String) = {
+    val url = "http://weather.yahooapis.com/forecastrss?w=" + woeid
+    val response = Source.fromURL(url).mkString
+    val xmlResponse = XML.loadString(response)
+    println(xmlResponse \\ "location" \\ "@city",
+        xmlResponse \\ "condition" \\ "@temp")
+}
+
+val caller = self
+
+for(id <- 2391271 to 2391279) {
+    actor{ getWeatherInfo(id.toString) }
+}
+
+for(id <- 2391271 to 2391279) {
+    receiveWithin(5000) {
+        case msg => println(msg)
+    }
+}