mirror of
https://github.com/MartinThoma/LaTeX-examples.git
synced 2025-04-25 06:18:05 +02:00
misc
This commit is contained in:
parent
2a58ef985d
commit
25732f4421
8 changed files with 91 additions and 32 deletions
|
@ -101,14 +101,16 @@ Die Funktionsapplikation sei linksassoziativ. Es gilt also:
|
||||||
|
|
||||||
Die Call-By-Name Auswertung wird in Funktionen verwendet.
|
Die Call-By-Name Auswertung wird in Funktionen verwendet.
|
||||||
|
|
||||||
|
Haskell verwendet die Call-By-Name Auswertungsreihenfolge zusammen mit \enquote{sharing}. Dies nennt man Lazy Evaluation.
|
||||||
|
\todo[inline]{Was ist sharing?}
|
||||||
|
|
||||||
\begin{definition}[Call-By-Value]\xindex{Call-By-Value}%
|
\begin{definition}[Call-By-Value]\xindex{Call-By-Value}%
|
||||||
In der Call-By-Value Auswertung wird der linkeste Redex reduziert, der
|
In der Call-By-Value Auswertung wird der linkeste Redex reduziert, der
|
||||||
nicht von einem $\lambda$ umgeben ist und dessen Argument ein Wert ist.
|
nicht von einem $\lambda$ umgeben ist und dessen Argument ein Wert ist.
|
||||||
\end{definition}
|
\end{definition}
|
||||||
|
|
||||||
Die Call-By-Value Auswertungsreihenfolge wird in C und Java verwendet.
|
Die Call-By-Value Auswertungsreihenfolge wird in C und Java verwendet.
|
||||||
Auch in Haskell werden arithmetische Ausdrücke in der Call-By-Name Auswertungsreihenfolge
|
Auch in Haskell werden arithmetische Ausdrücke in der Call-By-Name Auswertungsreihenfolge reduziert.
|
||||||
reduziert.
|
|
||||||
|
|
||||||
\section{Church-Zahlen}
|
\section{Church-Zahlen}
|
||||||
Im $\lambda$-Kalkül lässt sich jeder mathematische Ausdruck darstellen, also
|
Im $\lambda$-Kalkül lässt sich jeder mathematische Ausdruck darstellen, also
|
||||||
|
@ -120,52 +122,63 @@ darstellt. Dafür dürfen wir nur Variablen und $\lambda$ verwenden. Eine Mögli
|
||||||
das zu machen sind die sog. \textit{Church-Zahlen}.
|
das zu machen sind die sog. \textit{Church-Zahlen}.
|
||||||
|
|
||||||
Dabei ist die Idee, dass die Zahl angibt wie häufig eine Funktion $f$ auf eine
|
Dabei ist die Idee, dass die Zahl angibt wie häufig eine Funktion $f$ auf eine
|
||||||
Variable $x$ angewendet wird. Also:
|
Variable $z$ angewendet wird. Also:
|
||||||
\begin{itemize}
|
\begin{itemize}
|
||||||
\item $0 := \lambda f~x. x$
|
\item $0 := \lambda f~z. z$
|
||||||
\item $1 := \lambda f~x. f x$
|
\item $1 := \lambda f~z. f z$
|
||||||
\item $2 := \lambda f~x. f (f x)$
|
\item $2 := \lambda f~z. f (f z)$
|
||||||
\item $3 := \lambda f~x. f (f (f x))$
|
\item $3 := \lambda f~z. f (f (f z))$
|
||||||
\end{itemize}
|
\end{itemize}
|
||||||
|
|
||||||
Auch die gewohnten Operationen lassen sich so darstellen.
|
Auch die gewohnten Operationen lassen sich so darstellen.
|
||||||
|
|
||||||
\begin{beispiel}[Nachfolger-Operation]
|
\begin{beispiel}[Nachfolger-Operation]
|
||||||
\begin{align*}
|
\begin{align*}
|
||||||
\succ :&= \lambda n f z. f (n f x)\\
|
\succ :&= \lambda n f z. f (n f z)\\
|
||||||
&= \lambda n. (\lambda f (\lambda x f (n f x)))
|
&= \lambda n. (\lambda f (\lambda z f (n f z)))
|
||||||
\end{align*}
|
\end{align*}
|
||||||
Dabei ist $n$ die Zahl.
|
Dabei ist $n$ die Zahl.
|
||||||
|
|
||||||
Will man diese Funktion anwenden, sieht das wie folgt aus:
|
Will man diese Funktion anwenden, sieht das wie folgt aus:
|
||||||
\begin{align*}
|
\begin{align*}
|
||||||
\succ 1 &= (\lambda n f x. f(n f x)) 1\\
|
\succ 1&= (\lambda n f z. f(n f z)) 1\\
|
||||||
&= (\lambda n f x. f(n f x)) \underbrace{(\lambda f~x. f x)}_{n}\\
|
&= (\lambda n f z. f(n f z)) \underbrace{(\lambda f~z. f z)}_{n}\\
|
||||||
&= \lambda f x. f (\lambda f~x. f x) f x\\
|
&= \lambda f z. f (\lambda f~z. f z) f z\\
|
||||||
&= \lambda f x. f (f x)\\
|
&= \lambda f z. f (f z)\\
|
||||||
&= 2
|
&= 2
|
||||||
\end{align*}
|
\end{align*}
|
||||||
\end{beispiel}
|
\end{beispiel}
|
||||||
|
|
||||||
\begin{beispiel}[Addition]
|
\begin{beispiel}[Addition]
|
||||||
\begin{align*}
|
\begin{align*}
|
||||||
\text{+} : &= \lambda m n f x. m f (n f x)
|
\text{plus} &:= \lambda m n f z. m f (n f z)
|
||||||
\end{align*}
|
\end{align*}
|
||||||
Dabei ist $m$ der erste Summand und $n$ der zweite Summand.
|
Dabei ist $m$ der erste Summand und $n$ der zweite Summand.
|
||||||
\end{beispiel}
|
\end{beispiel}
|
||||||
|
|
||||||
\begin{beispiel}[Multiplikation]
|
\begin{beispiel}[Multiplikation]
|
||||||
%\[\text{\cdot} := \lambda m n.m(n f) \]
|
\begin{align*}
|
||||||
|
\text{times} :&= \lambda m n f. m~s~(n~f~z)\\
|
||||||
|
&\overset{\eta}{=} \lambda m n f z. n (m s) z
|
||||||
|
\end{align*}
|
||||||
Dabei ist $m$ der erste Faktor und $n$ der zweite Faktor.
|
Dabei ist $m$ der erste Faktor und $n$ der zweite Faktor.
|
||||||
\end{beispiel}
|
\end{beispiel}
|
||||||
|
|
||||||
\begin{beispiel}[Potenz]
|
\begin{beispiel}[Potenz]
|
||||||
%\[\text{\cdot} := \text{TODO}\]
|
\begin{align*}
|
||||||
|
\text{exp} :&= \lambda b e. eb\\
|
||||||
|
&\overset{\eta}{=} \lambda b e f z. e b f z
|
||||||
|
\end{align*}
|
||||||
Dabei ist $b$ die Basis und $e$ der Exponent.
|
Dabei ist $b$ die Basis und $e$ der Exponent.
|
||||||
\end{beispiel}
|
\end{beispiel}
|
||||||
|
|
||||||
\section{Weiteres}
|
\section{Church-Booleans}
|
||||||
|
\begin{definition}[Church-Booleans]\xindex{Church-Booleans}%
|
||||||
|
\texttt{True} wird zu $c_{\text{true}} := \lambda t. \lambda f. t$.\\
|
||||||
|
\texttt{False} wird zu $c_{\text{false}} := \lambda t. \lambda f. f$.
|
||||||
|
\end{definition}
|
||||||
|
|
||||||
|
\section{Weiteres}
|
||||||
\begin{satz}[Satz von Curch-Rosser]
|
\begin{satz}[Satz von Curch-Rosser]
|
||||||
Wenn zwei unterschiedliche Terme $a$ und $b$ äquivalent sind, d.h. mit Reduktionsschritten beliebiger Richtung ineinander transformiert werden können, dann gibt es einen weiteren Term $c$, zu dem sowohl $a$ als auch $b$ reduziert werden können.
|
Wenn zwei unterschiedliche Terme $a$ und $b$ äquivalent sind, d.h. mit Reduktionsschritten beliebiger Richtung ineinander transformiert werden können, dann gibt es einen weiteren Term $c$, zu dem sowohl $a$ als auch $b$ reduziert werden können.
|
||||||
\end{satz}
|
\end{satz}
|
Binary file not shown.
|
@ -10,7 +10,7 @@ In Prolog definiert man Terme.
|
||||||
\section{Erste Schritte}
|
\section{Erste Schritte}
|
||||||
\subsection{Hello World}
|
\subsection{Hello World}
|
||||||
Speichere folgenden Quelltext als \texttt{hello-world.pl}:
|
Speichere folgenden Quelltext als \texttt{hello-world.pl}:
|
||||||
\inputminted[linenos, numbersep=5pt, tabsize=4, frame=lines, label=hello-world.hs]{prolog}{scripts/prolog/hello-world.hs}
|
\inputminted[linenos, numbersep=5pt, tabsize=4, frame=lines, label=hello-world.hs]{prolog}{scripts/prolog/hello-world.pl}
|
||||||
|
|
||||||
Kompiliere ihn mit \texttt{gplc hello-world.pl}. Es wird eine
|
Kompiliere ihn mit \texttt{gplc hello-world.pl}. Es wird eine
|
||||||
ausführbare Datei erzeugt.
|
ausführbare Datei erzeugt.
|
||||||
|
|
|
@ -10,11 +10,25 @@ $\emptyset\;\;\;$ Leere Menge\\
|
||||||
$\epsilon\;\;\;$ Das leere Wort\\
|
$\epsilon\;\;\;$ Das leere Wort\\
|
||||||
$\alpha, \beta\;\;\;$ Reguläre Ausdrücke\\
|
$\alpha, \beta\;\;\;$ Reguläre Ausdrücke\\
|
||||||
$L(\alpha)\;\;\;$ Die durch $\alpha$ beschriebene Sprache\\
|
$L(\alpha)\;\;\;$ Die durch $\alpha$ beschriebene Sprache\\
|
||||||
$L(\alpha | \beta) = L(\alpha) \cup L(\beta)$\\
|
$\begin{aligned}[t]
|
||||||
$L(\alpha \cdot \beta) = L(\alpha) \cdot L(\beta)$\\
|
L(\alpha | \beta) &= L(\alpha) \cup L(\beta)\\
|
||||||
$\alpha^+ = L(\alpha)^+$ TODO: Was ist $L(\alpha)^+$\\
|
L(\alpha \cdot \beta)&= L(\alpha) \cdot L(\beta)
|
||||||
$\alpha^* = L(\alpha)^*$ TODO: Was ist $L(\alpha)^*$\\
|
\end{aligned}$\\
|
||||||
|
$L^0 := \Set{\varepsilon}\;\;\;$ Die leere Sprache\\
|
||||||
|
$L^{n+1} := L^n \circ L \text{ für } n \in \mdn_0\;\;\;$ Potenz einer Sprache\\
|
||||||
|
$\begin{aligned}[t]
|
||||||
|
\alpha^+ &=& L(\alpha)^+ &=& \bigcup_{i \in \mdn} L(\alpha)^i\\
|
||||||
|
\alpha^* &=& L(\alpha)^* &=& \bigcup_{i \in \mdn_0} L(\alpha)^i
|
||||||
|
\end{aligned}$
|
||||||
|
|
||||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||||
% Reguläre Ausdrücke %
|
% Logik %
|
||||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||||
|
\section*{Logik}
|
||||||
|
$\mathcal{M} \models \varphi\;\;\;$ Im Modell $\mathcal{M}$ gilt das Prädikat $\varphi$.\\
|
||||||
|
$\psi \vdash \varphi\;\;\;$ Die Formel $\varphi$ kann aus der Menge der Formeln $\psi$ hergeleitet werden.\\
|
||||||
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||||
|
% Weiteres %
|
||||||
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||||
|
\section*{Weiteres}
|
||||||
$\bot\;\;\;$ Bottom\\
|
$\bot\;\;\;$ Bottom\\
|
|
@ -24,10 +24,6 @@ Anregungen, Verbesserungsvorschläge und Ergänzungen können per
|
||||||
Pull-Request gemacht werden oder mir per Email an info@martin-thoma.de
|
Pull-Request gemacht werden oder mir per Email an info@martin-thoma.de
|
||||||
geschickt werden.
|
geschickt werden.
|
||||||
|
|
||||||
\section*{Was ist Programmierparadigmen?}
|
|
||||||
|
|
||||||
TODO
|
|
||||||
|
|
||||||
\section*{Erforderliche Vorkenntnisse}
|
\section*{Erforderliche Vorkenntnisse}
|
||||||
Grundlegende Kenntnisse vom Programmieren, insbesondere mit Java,
|
Grundlegende Kenntnisse vom Programmieren, insbesondere mit Java,
|
||||||
wie sie am KIT in \enquote{Programmieren} vermittelt werden, werden
|
wie sie am KIT in \enquote{Programmieren} vermittelt werden, werden
|
||||||
|
|
|
@ -1,7 +1,22 @@
|
||||||
\chapter{X10}
|
%!TEX root = Programmierparadigmen.tex
|
||||||
\index{X10|(}
|
\chapter{X10}\index{X10|(}%
|
||||||
|
X10 ist eine objektorientierte Programmiersprache, die 2004 bei IBM entwickelt
|
||||||
|
wurde.
|
||||||
|
|
||||||
|
\section{Erste Schritte}
|
||||||
|
Als erstes sollte man x10 von \url{http://x10-lang.org/x10-development/building-x10-from-source.html?id=248} herunterladen.
|
||||||
|
|
||||||
|
Dann kann man die bin/x10c++ zum erstellen von ausführbaren Dateien nutzen.
|
||||||
|
Der Befehl \texttt{x10c++ hello-world.x10} erstellt eine ausführbare Datei namens
|
||||||
|
\texttt{a.out}.
|
||||||
|
|
||||||
|
\inputminted[numbersep=5pt, tabsize=4, frame=lines, label=hello-world.x10]{cpp}{scripts/x10/hello-world.x10}
|
||||||
|
|
||||||
\section{Syntax}
|
\section{Syntax}
|
||||||
\section{Beispiele}
|
\section{Beispiele}
|
||||||
|
|
||||||
\index{X10|)}
|
\section{Weitere Informationen}
|
||||||
|
\begin{itemize}
|
||||||
|
\item \url{http://x10-lang.org/}
|
||||||
|
\end{itemize}
|
||||||
|
\index{X10|)}
|
|
@ -0,0 +1,15 @@
|
||||||
|
import x10.io.Console;
|
||||||
|
|
||||||
|
class HelloWholeWorld {
|
||||||
|
public static def main(args:Rail[String]):void {
|
||||||
|
if (args.size < 1) {
|
||||||
|
Console.OUT.println("Usage: HelloWholeWorld message");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
finish for (p in Place.places()) {
|
||||||
|
at (p) async Console.OUT.println(here+" says hello and "+args(0));
|
||||||
|
}
|
||||||
|
Console.OUT.println("Goodbye");
|
||||||
|
}
|
||||||
|
}
|
6
documents/Programmierparadigmen/scripts/x10/hello-world.x10
Executable file
6
documents/Programmierparadigmen/scripts/x10/hello-world.x10
Executable file
|
@ -0,0 +1,6 @@
|
||||||
|
// file HelloWorld.x10
|
||||||
|
public class HelloWorld {
|
||||||
|
public static def main(args: Array[String](1)){
|
||||||
|
x10.io.Console.OUT.println("Hello, World");
|
||||||
|
}
|
||||||
|
}
|
Loading…
Add table
Add a link
Reference in a new issue