diff --git a/documents/Programmierparadigmen/Lambda.tex b/documents/Programmierparadigmen/Lambda.tex index 53ec6dc..9ea83d2 100644 --- a/documents/Programmierparadigmen/Lambda.tex +++ b/documents/Programmierparadigmen/Lambda.tex @@ -46,7 +46,7 @@ Die Funktionsapplikation sei linksassoziativ. Es gilt also: Der untypisierte $\lambda$-Kalkül ist Turing-Äquivalent. \end{satz} -\section{Reduktionen} +\section{Reduktionen}\index{Reduktionen|(} \begin{definition}[Redex]\xindex{Redex}% Eine $\lambda$-Term der Form $(\lambda x. t_1) t_2$ heißt Redex. \end{definition} @@ -87,6 +87,7 @@ Die Funktionsapplikation sei linksassoziativ. Es gilt also: \begin{beispiel}[$\eta$-Äquivalenz] TODO \end{beispiel} +\index{Reduktionen|)} \section{Auswertungsstrategien} \begin{definition}[Normalenreihenfolge]\xindex{Normalenreihenfolge}% diff --git a/documents/Programmierparadigmen/MPI.tex b/documents/Programmierparadigmen/MPI.tex index 663d094..d6ce044 100644 --- a/documents/Programmierparadigmen/MPI.tex +++ b/documents/Programmierparadigmen/MPI.tex @@ -45,14 +45,44 @@ Der Rang wird von MPI zum Identifizieren eines Prozesses verwendet. Die Rangnumm \rule{\textwidth}{0.4pt} \inputminted[numbersep=5pt, tabsize=4]{c}{scripts/mpi/mpi-reduce.c} Führt eine globale Operation \textbf{op} aus; der Prozeß \enquote{root} erhält das Resultat. + \textbf{Parameter} \begin{itemize} - \item \textbf{sendbuf} Startadresse des Sendepuffers - \item \textbf{count} Anzahl der Elemente im Sendepuffer - \item \textbf{datatype} Datentyp der Elemente von \texttt{sendbuf} - \item \textbf{op} auszuführende Operation (handle) - \item \textbf{root} Rang des Root-Prozesses in comm, der das Ergebnis haben soll - \item \textbf{comm} Kommunikator (handle) + \item \textbf{sendbuf}: Startadresse des Sendepuffers + \item \textbf{count}: Anzahl der Elemente im Sendepuffer + \item \textbf{datatype}: Datentyp der Elemente von \texttt{sendbuf} + \item \textbf{op}: auszuführende Operation (handle) + \item \textbf{root}: Rang des Root-Prozesses in comm, der das Ergebnis haben soll + \item \textbf{comm}: Kommunikator (handle) +\end{itemize} +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\rule{\textwidth}{0.4pt} +\inputminted[numbersep=5pt, tabsize=4]{c}{scripts/mpi/mpi-bcast.c} +Sendet eine Nachricht vom Prozess \texttt{root} an alle anderen Prozesse des +angegebenen Kommunikators. + +\textbf{Parameter} +\begin{itemize} + \item \textbf{buffer}: Startadresse des Datenpuffers + \item \textbf{count}: Anzahl der Elemente im Puffer + \item \textbf{datatype}: Datentyp der Pufferelemente (handle) + \item \textbf{root}: Wurzelprozeß; der, welcher sendet + \item \textbf{comm}: Kommunikator (handle) +\end{itemize} +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\rule{\textwidth}{0.4pt} +\inputminted[numbersep=5pt, tabsize=4]{c}{scripts/mpi/mpi-scatter.c} +Verteilt Daten vom Prozess \texttt{root} unter alle anderen Prozesse in der Gruppe, so daß, soweit möglich, alle Prozesse gleich große Anteile erhalten. + +\textbf{Parameter} +\begin{itemize} + \item \textbf{sendbuf}: Anfangsadresse des Sendepuffers (Wert ist lediglich für 'root' signifikant) + \item \textbf{sendcount}: Anzahl der Elemente, die jeder Prozeß geschickt bekommen soll (integer) + \item \textbf{sendtype}: Datentyp der Elemente in sendbuf (handle) + \item \textbf{recvcount}: Anzahl der Elemente im Empfangspuffer. Meist ist es günstig, recvcount = sendcount zu wählen. + \item \textbf{recvtype}: Datentyp der Elemente des Empfangspuffers (handle) + \item \textbf{root}: Rang des Prozesses in comm, der die Daten versendet + \item \textbf{comm}: Kommunikator (handle) \end{itemize} \textbf{Beispiel} diff --git a/documents/Programmierparadigmen/Programmierparadigmen.pdf b/documents/Programmierparadigmen/Programmierparadigmen.pdf index 2a9b588..9e09927 100644 Binary files a/documents/Programmierparadigmen/Programmierparadigmen.pdf and b/documents/Programmierparadigmen/Programmierparadigmen.pdf differ diff --git a/documents/Programmierparadigmen/Prolog.tex b/documents/Programmierparadigmen/Prolog.tex index c29bf0c..e8c0bff 100644 --- a/documents/Programmierparadigmen/Prolog.tex +++ b/documents/Programmierparadigmen/Prolog.tex @@ -35,6 +35,9 @@ Dieses skript soll man \texttt{swipl -f test.pl} aufrufen. Dann erhält man: \inputminted[numbersep=5pt, tabsize=4]{prolog}{scripts/prolog/splits.sh} +\subsection{Delete} +\inputminted[numbersep=5pt, tabsize=4]{prolog}{scripts/prolog/delete.pl} + \subsection{Zebrarätsel} Folgendes Rätsel wurde von \url{https://de.wikipedia.org/w/index.php?title=Zebrar%C3%A4tsel&oldid=126585006} entnommen: diff --git a/documents/Programmierparadigmen/scripts/haskell/data-example.hs b/documents/Programmierparadigmen/scripts/haskell/data-example.hs index e7bbf46..fb1cb56 100644 --- a/documents/Programmierparadigmen/scripts/haskell/data-example.hs +++ b/documents/Programmierparadigmen/scripts/haskell/data-example.hs @@ -1,4 +1,5 @@ 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) \ No newline at end of file +data Point = Point Float Float deriving (Show) +data Tree t = Node t [Tree t] \ No newline at end of file diff --git a/documents/Programmierparadigmen/scripts/haskell/tree-map.hs b/documents/Programmierparadigmen/scripts/haskell/tree-map.hs new file mode 100644 index 0000000..cba3141 --- /dev/null +++ b/documents/Programmierparadigmen/scripts/haskell/tree-map.hs @@ -0,0 +1,5 @@ +data Tree t = Node t [Tree t] +reduceT :: (t -> t -> t) -> Tree t -> t +reduceT f (Node x []) = x +reduceT f (Node x [y]) = f x y +reduceT f (Node x (y:ys)) = reduceT f (f x y) ys \ No newline at end of file diff --git a/documents/Programmierparadigmen/scripts/mpi/mpi-bcast.c b/documents/Programmierparadigmen/scripts/mpi/mpi-bcast.c new file mode 100644 index 0000000..0c16d09 --- /dev/null +++ b/documents/Programmierparadigmen/scripts/mpi/mpi-bcast.c @@ -0,0 +1 @@ +MPI_Bcast(buffer, count, datatype, root, comm) \ No newline at end of file diff --git a/documents/Programmierparadigmen/scripts/mpi/mpi-scatter.c b/documents/Programmierparadigmen/scripts/mpi/mpi-scatter.c new file mode 100644 index 0000000..8bab601 --- /dev/null +++ b/documents/Programmierparadigmen/scripts/mpi/mpi-scatter.c @@ -0,0 +1,2 @@ +MPI_Scatter(sendbuf, sendcount, sendtype, recvbuf, + recvcount, recvtype, root, comm) \ No newline at end of file diff --git a/documents/Programmierparadigmen/scripts/prolog/delete.pl b/documents/Programmierparadigmen/scripts/prolog/delete.pl new file mode 100644 index 0000000..0810727 --- /dev/null +++ b/documents/Programmierparadigmen/scripts/prolog/delete.pl @@ -0,0 +1,2 @@ +remove([(X,A)|L],X,[(X,ANew)|L]) :- A>0, ANew is A-1. +remove([X|L],Y,[X|L1]) :- remove(L,Y,L1). diff --git a/documents/Programmierparadigmen/scripts/x10/hello-world.x10 b/documents/Programmierparadigmen/scripts/x10/hello-world.x10 index f2a12b6..6f4411a 100755 --- a/documents/Programmierparadigmen/scripts/x10/hello-world.x10 +++ b/documents/Programmierparadigmen/scripts/x10/hello-world.x10 @@ -1,6 +1,6 @@ // file HelloWorld.x10 public class HelloWorld { - public static def main(args: Array[String](1)){ + public static def main(args:Rail[String]) { x10.io.Console.OUT.println("Hello, World"); } } \ No newline at end of file