BuK/IIm10/BuK-Übung09 G2

Aus ProgrammingWiki

Wiki-Quelltext dieser Seite.

=β-Konversion=
== Aufgabe ==
Reduzieren Sie den λ-Ausdruck (λx. x x)((λz. z y) x) durch mehrfache Anwendung der
β-Regel. Verfolgen Sie alle möglichen Anwendungsstellen (sog. β-Redexe).
== Lösung ==
1 Variante von außen nach innen(leftmost outermost):
<pre>
(λx. x x)((λz. z y) x)
((λz. z y) x)((λz. z y) x)
(x y)((λz. z y) x)
(x y)(x y)
</pre>
2 Variante von innen nach außen(leftmost innermost):
<pre>
(λx. x x)((λz. z y) x)
(λx. x x)(x y)
(x y)(x y)
</pre>

=Scheme=
== Aufgabe ==
Evaluieren Sie den folgenden Scheme-Ausdruck durch Handrechnung.
((lambda (x) (* x (+ 2 x)))((lambda (x)(* x x)) 3))
Uberprüfen Sie das Ergebnis anschließend am Rechner.
==Lösung==
Es wird von innen nach außen evaluiert.
<pre>
((lambda (x) (* x (+ 2 x)))((lambda (x)(* x x)) 3))
((lambda (x) (* x (+ 2 x)))((* 3 3)))
((lambda (x) (* x (+ 2 x)))(9))
(* 9 (+ 2 9))
(* 9 (11))
99
</pre>

=Umbenennung gebundener Variablen=
== Aufgabe ==
Evaluieren Sie den folgenden Ausdruck: ((λx. (λy. (x y)))(y w)). Hinweis: Falsch wäre
(λy. ((y w) y)).
== Lösung ==
Hier ist zu beachten, dass die Variable y sowohl ungebunden als auch gebunden vorkommt. Bevor der Ausdruck evaluiert werden kann muss die gebundene Variable umbenannt werden.
<br/>
((λx. (λy. (x y)))(y w)) <math> \rightarrow \atop \alpha </math> ((λx. (λz. (x z)))(y w))

=α-Konversion=
== Aufgabe ==
Kann die gebundene Variable x in (λx. (+ x 3)) beliebig umbenannt werden? Geben Sie
zwei Antworten: eine konkrete auf den Ausdruck bezogene und eine verallgemeinerte.

=Curryfication=
== Aufgabe ==
Curryfizieren Sie die Funktion f, mit f(x, y, z) = x + y + z, zweimal. Geben Sie die
Lösung in mathematischer Notation an und schreiben Sie außerdem eine entsprechendeScheme-Prozedur.

=Evaluationsstrategien in funktional-applikativen Sprachen=
== Aufgabe ==
Wiederholen Sie alternative Evaluationsstrategien in funktional-applikativen Sprachen
(eager, lazy, ...) und arbeiten Sie die jeweiligen Eigenschaften heraus.