BuK-Kreativaufgabe10 G1

Aus ProgrammingWiki

Wechseln zu: Navigation, Suche

Loading

Klasse der primitiv rekursiven Funktionen

Aufgabe

Entwickeln Sie einen "Werkzeugkasten" für primitiv rekursive Funktionen. Es wird erwartet, dass aus primitiv rekursiven (Basis-)Funktionen unter Verwendung der Kompositionstechniken (Substitution und primitive Rekursion) neue primitiv rekursive Funktionen generiert werden. Diese sollen verwendbar sein.

Lösung

Zur Lösung dieses Problems haben wir uns für die Verwendung der Programmiersprache Java entschieden. Da wir mit n-stelligen Funktionen arbeiten, erschien uns als einfachste Lösung, die Erstellung eines Interfaces für eine Klasse mit nur einer Funktion, die ein int-Array erwartet und einen int-Wert zurückgibt.

Für die Basisfunktionen haben wir statische Methoden bereitgestellt, die die entsprechende Funktion zurückgeben. Im Falle der Nachfolgerfunktion S sieht das folgendermaßen aus:

Die Methode besitzt natürlich nur einen Eingabeparameter, folglich wird auch nur das erste Element des Arrays benötigt. Bei der Nullfunktion haben wir uns entschieden, diese so zu erweitern, dass jede beliebige Konstantenfunktion C zurückgegeben werden kann. Dazu wurde der statische Aufruf einfach entsprechend parametrisiert.

Das war ebenso bei der Projektionsfunktion U nötig, da zusätzlich zur Liste von Eingabeparametern zusätzlich der entsprechende Index angegeben werden musste. Hierbei war darauf zu achten, dass der Index bei einem Array in Java 0-basiert ist und somit der Index entsprechend angepasst werden musste.

Nun da die Basisfunktionen definiert waren, konnten auch Substitution und Rekursion implementiert werden. Zur Substitution gibt es dabei nicht viel zu beachten. Man spricht auch von einer Verkettung von Funktionen. Das wurde wie folgt realisiert:

Die Ergebnisse der Operationen angewandt auf l dienen als Eingabeparameter für die Funktion f.

Die Umsetzung der Rekursion war hier schon etwas komplizierter. Durch strikte Umsetzung der mathematischen Notation, kamen wir schließlich auf folgende Lösung:

Nun da wir den Werkzeugkasten mit allen Grundbausteinen gefüllt haben, können nun damit alle primitiv rekursiven Funktionen erzeugt werden. In folgendem Beispiel ist dazu die Erzeugung einer Additions- und einer Multiplikationsfunktion angegeben:

Persönliche Werkzeuge