BuK/IIm11/BuK-Übung08

Aus ProgrammingWiki

Wiki-Quelltext dieser Seite.

==Semantik: $\alpha$-Regel (Felix Nitsche, Stefan Lüttke)==
* Wenden Sie für  (($\lambda$ x. ( $\lambda$ y. ((x y)))(y w)) vor der $\beta$-Reduktion die $\alpha$-Konvention an.

==Semantik: $\eta$-Regel (Daniel Tasche, Jens Heider)==
* Vereinfachen Sie den Racket-Ausdruck ($\lambda$(z)(($\lambda$(x)($*$ 3 x)) z)).

==Reduktion (Raik Bieniek, Max Wielsch)==
* Reduzieren Sie (($\lambda$(x)(x x))($\lambda$(x) x)) und (($\lambda$(x)(x x))($\lambda$(x)(x x)))
* Zeigen Sie, dass für  Y := ($\lambda$ f. (($\lambda$ x. (f (x x)))($\lambda$ x. (f (x x))))) gilt: (Y g) = (g (Y g))

==Reduktionsreihenfolge (Ingo Körner, Christof Ochmann)==
* Zeigen Sie dass es von der Reduktionsreihenfolge abhängen kann, ob die für (($\lambda$ y. z)(($\lambda$ x. (x x))($\lambda$ x. (x x)))) existierende Normalform z gefunden wird oder nicht.
* Verwenden Sie zur Berechnung von (($\lambda$x. ((x d)(($\lambda$ y. (x y)) a))) b) unterschiedliche Reduktionsreihenfolgen.

==Boolesche Werte (Stefan Scheumann, Robert Rosenberger)==
Berechnen Sie  <tt>if true e1 e2 = e1</tt>.

<language>Scheme</language>
<language>Scheme</language>
<language>Scheme</language>
==Curryfizierung (Ronald Krause, Tobias Salzmann)==
Currifizieren Sie  $f(x, y, z) = x + y + z$

Die Funktion $f(x,y,z)$ besitzt drei Argumente, woraus die Summe derer gebildet werden soll. Bei der Anwendung der Curryfizierung wird die Funktion $f$ mit deren Argumenten so umgewandelt, dass eine Funktion entsteht, welche genau einen Parameter als Eingabe besitzt.

Grund für die Curryfizierung ist die Verwendung von einstelligen Funktionen, wie z.B. im '''$\lambda$-Kalkül''' oder Haskell.

Im Allgemeinen beschreibt folgende mathematische Notation die Umwandlung durch die Curryfizierung:

$f: A_1 \times A_2 \times ... \times A_3 \rightarrow R$ zu $ F: A_1 \mapsto (A_2 \mapsto (A_3 \mapsto (... \mapsto (A_n \mapsto R))))$, sodass f(a,b,c)= F(a)(b)(c).

===Beispiel: f(x,y,z)===

Folgende Scheme-Prozedur beschreibt das Addieren von drei Argumenten:

<code id="4fba572141700">
(define addThreeArguments
 (lambda (x y z)
  (+ x y z)))
</code>

<run id="4fba572141778">
(addThreeArguments 1 2 3)
</run>

===Beispiel: F(x)(y)(z)===

Folgende Scheme-Prozedur beschreibt die Addition von drei Argumenten nach der Curryfizierung:

<code id="4fba57e47cec9">
(define curryAddThreeArguments
 (lambda (x)
  (lambda (y)
   (lambda (z)
    (+ x y z)))))
</code>

<run id="4fba57e47cf3e">
(((curryAddThreeArguments 1) 2) 3)
</run>

==Registermaschine(Ronald Krause, Tobias Salzmann)==
Führen Sie folgendes Programmbeispiel per Hand aus.

'''Beispiel:'''

<code id="4fba4bc9c507a">
0     R0=5
1     R1=3
2     R3=1
3     IFZERO R1 GOTO 7
4     R2 += R0
5     R1 -= R3
6     GOTO 3
7     R0 = R2
8     STOP
</code>

Das Programm stoppt beim Erreichen des STOP-Befehls mit dem Ergebnis in R0.