BuK/IIm20/Vorlesung 9 Lemke

Aus ProgrammingWiki

Wiki-Quelltext dieser Seite.

<language>Python</language>
== Übungsaufgabe S. 5 ==

=== Implementation der angegebenen Lambdafunktionen in Python ===

'''(λx. x)'''

<code id="60aa825353519">
identity_function = lambda x : x
</code>

'''(λf . (λx. (f x) ) )'''

Als Python-Lambdafunktion:

<code id="60aa825353582">
application = lambda f : lambda x : f(x)
</code>
<run id="60aa825353648">
test_f = lambda x : x * 3
applied = application(test_f)
print(applied(4))
</run>

Als reguläre Pythonfunktion:

<code id="60aa8253535e9">
def outer(f):
	def inner(x):
		return f(x)
	return inner
</code>
<run id="60aa825353697">
def test_f(x):
	return x * 3

applied = outer(test_f)
print(applied(4))
</run>

== Übungsaufgabe S. 11 ==

=== Erklärung der Funktion free() (bound() funktioniert analog) ===

[[Bild:Erklaerung free().jpg]]

== Übungsaufgabe S. 13 ==

=== Anwendung der ɑ-Konvention ===

[[Bild:Alpha-regel.jpg]]

== Übungsaufgabe S. 14 ==

=== Reduktion mit η-Regel und mit β-Regel ===

[[Bild:Eta-regel.jpg]]

== Übungsaufgaben S. 15 ==

=== Reduzieren Sie ((λ(x)(x x))(λ(x) x)) und ((λ(x)(x x))(λ(x)(x x))) ===

[[Bild:1.reduktion s.15.jpg.jpg]]

=== Zeigen Sie, dass für Y := (λf . ((λx. (f (x x)))(λx. (f (x x))))) gilt: (Y g ) = (g (Y g )) ===

[[Bild:2.reduktion s.15.jpg]]

== Übungsaufgabe S. 17 ==

=== Zeigen Sie, dass es von der Reduktionsreihenfolge abhängen kann, ob die für ((λy . z)((λx. (x x))(λx. (x x)))) existierende Normalform z gefunden wird oder nicht ===

[[Bild:1.reduktionsreihenfolge s.17.jpg]]

=== Verwenden Sie zur Berechnung von ((λx. ((x d)((λy . (x y )) a))) b) unterschiedliche Reduktionsreihenfolgen ===

[[Bild:2.reduktionsreihenfolge s.17.jpg]]

== Übungsaufgabe S. 22 ==

=== Currifizieren Sie f (x, y , z) = x + y + z ===

Mit Python-Lambdafunktionen:

<code id="60aa8a3a01c1e">
xyz = lambda x : lambda y : lambda z : x + y + z
</code>
<run id="60aa8a3a01d07">
x = xyz(1)
y = x(2)
z = y(3)
print(z)
</run>

Mit regulären Pythonfunktionen:

<code id="60aa8a3a01c92">
def pythonic_xyz(x):
	def fy(y):
		def fz(z):
			return x + y + z
		return fz
	return fy
</code>
<run id="60aa8a3a01d67">
x = pythonic_xyz(1)
y = x(2)
z = y(3)
print(z)
</run>

== Übungsaufgabe S. 23 ==

=== Erklärung der boolschen Werte ===

[[Bild:Boolsche werte erklaerung.jpg]]

=== Berechnen Sie if true e1 e2 = e1 ===

[[Bild:Boolsche werte uebungsaufgabe.jpg]]