BuK/IIm10/BuK-Kreativaufgabe10 G1

Aus ProgrammingWiki

Wiki-Quelltext dieser Seite.

= 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.
<code>
public interface RecFunc {

	public int calc(int[] l);
	
}
</code>
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:
<code>
public static RecFunc S(){
	return new RecFunc(){
		@Override
		public int calc(int[] l) {
			return l[0] + 1;
		}
	};
}
</code>
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.
<code>
public static RecFunc C(final int i){
	return new RecFunc(){

		@Override
		public int calc(int[] l) {
			return i;
		}
	};
}
</code>
Das war ebenso bei der Projektionsfunktion U nötig, da zusätzlich zur Liste von Eingabeparametern zusätzlich der entsprechende Index angegeben werden musste.
<code>
public static RecFunc U(final int i){
	return new RecFunc(){
		@Override
		public int calc(int[] l) {
			return l[i-1];
		}
	};
}
</code>