2. ¨Ubungsaufgabe zu Funktionale Programmierung Themen

Werbung
2. Übungsaufgabe zu Funktionale Programmierung
Themen: Ganzzahlige Funktionen, Lambda-Kalkül
ausgegeben: 29.10.2002, fällig: 5.11.2002
Schreiben Sie Funktionen mit Typdeklarationen zur Lösung folgender Problemstellungen in eine Datei namens Aufgabe2.hs:
• Die Funktion numPrime soll berechnen, wie viele Primzahlen es zwischen den als Argumente übergebenen ganzen Zahlen gibt (einschließlich der Argumente). Verwenden Sie eine Hilfsfunktion isPrime, die
bestimmt, ob eine gegebene Zahl eine Primzahl ist; isPrime soll ein
Ergebnis vom Typ Bool liefern, also True oder False. Weitere Hilfsfunktionen sind erlaubt. Hinweise: Der Aufruf der vordefinierten
Funktion mod n x“ liefert den Rest der ganzzahligen Division von
”
n durch x. Die kleinste Primzahl ist 2. Getestet wird nur mit positiven Argumenten, wobei das erste nicht größer als das zweite ist.
• Einfache λ-Ausdrücke (ohne Klammerung, Punkte und Leerzeichen)
sollen als Dezimalzahlen dargestellt werden, wobei jede Ziffer einem
Symbol entspricht. Die Ziffern 1 bis 9 repräsentieren unterschiedliche
Namen, λ wird durch 0 dargestellt. Zahlen werden von rechts nach
links gelesen. Beispielsweise kann λx.λy.x y z durch 3212010 dargestellt werden, wobei x durch 1, y durch 2 und z durch 3 repräsentiert
wird. Schreiben Sie eine Funktion frei mit zwei Parametern vom
Typ Integer. Das erste Argument soll eine Ziffer zwischen 1 und 9
sein, und das zweite ein λ-Ausdruck in Zahlendarstellung. Die Funktion soll True liefern, falls der durch das erste Argument repräsentierte Name frei im λ-Ausdruck vorkommt, und False falls der Name
nur gebunden oder gar nicht vorkommt.
• Schreiben Sie eine Funktion ersetzt mit drei Integer-Parametern,
wobei der erste und letzte Parameter für λ-Ausdrücke in Zahlendarstellung stehen, und der zweite einen Namen (Ziffer zwischen 1 und 9)
repräsentiert. Das Ergebnis soll die Ersetzung aller freien Vorkommen des zweiten Arguments im dritten Argument durch das erste
Argument sein. Ein Aufruf ersetzt e x f soll also [e/x]f liefern. Es
kann angenommen werden, dass 9 nicht frei vorkommt. Falls Umbenennungen nötig sind, kann gefahrlos in 9 umbenannt werden. Z.B.
soll ersetzt 1 2 2110 das Ergebnis 1990 liefern. Vermeiden Sie
unnötige Umbenennungen.
Herunterladen