BuK-Übung09 G2

Aus ProgrammingWiki

Wechseln zu: Navigation, Suche

Inhaltsverzeichnis

β-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):

(λ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)

2 Variante von innen nach außen(leftmost innermost):

(λx. x x)((λz. z y) x)
(λx. x x)(x y)
(x y)(x y)

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.

((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

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.
((λx. (λy. (x y)))(y w)) ((λ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.

Lösung

Konkret: Ja in diesem Fall kann die Variable x in jede Andere umbenannt werden.
Verallgemeinert: Die Variable kann nur dann umbenannt werden, wenn sie nicht in den Einflußbereich einer gebundenen Variable gelangt. D.h. es darf, in der Applikation, keine gebundene Variable mit demselben Namen existieren.

Loading

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 entsprechende Scheme-Prozedur.

Lösung

Mathematische Notation: Die mehrstellige Funktion wird in die einstellige Funktionen transformiert. Der Aufruf der Funktion lautet dann:

Scheme: Die Umsetzung der Funktion f in Scheme ergibt.

Wird die Funktion Curryfiziert ergibt sich das folgende Scheme Programm. Korrekterweise müsste die Addition (+) noch in eine einstellige Funktion überführt werden.

Evaluationsstrategien in funktional-applikativen Sprachen

Aufgabe

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

Persönliche Werkzeuge