3. Wieso partielle Auswertung ?

Wenn man eine Klasse von Problemen hat, gibt es prinzipiell zwei Möglichkeiten, diese auf einem Rechner zu lösen. Man kann die Klasse in viele kleinere Probleme aufteilen und für jedes Teilproblem ein eigenes Programm schreiben. Man sieht natürlich sofort, daß hier viel Programmierarbeit erforderlich ist. Außerdem ist dies natürlich fehleranfällig (wo viel Code, da viele Fehler) und schwer zu warten. Zum Beispiel würde eine Änderung des Datenformats sich auf alle 'Progrämmchen' auswirken, und es müßten alle geändert werden, was natürlich auch wieder fehlerträchtig ist.
Andererseits kann man ein einziges großes Programm schreiben, das die gesamte Problemklasse löst. Hier wird es aber im allgemeinen der Fall sein, daß das Programm im Vergleich zu den oben beschriebenen kleinen Programmen sehr langsam läuft. Dies kann z.B. seine Ursachen in einem sehr hohen Verwaltungsaufwand zur Erkennung des einzelnen zu lösenden Problems haben, zum anderen aber auch durch viele rekursive Funktionsaufrufe, die in den einzelnen Versionen nicht unbedingt auftreten ( siehe Beispiel zu xn ).
Durch partielle Auswertung kann man die Vorteile beider Lösungen nutzen. Man hat ein großes Programm, das alle Probleme löst, welches dann automatisch in die speziellen (und schnellen) Versionen umgewandelt wird. So braucht bei einer Änderung des Programms nur ein einziges Programm modifiziert zu werden, welches dann wieder automatisch und fehlerfrei in die schnellen 'Spezialprogramme' umgewandelt wird.

Partielle Auswertung ist meist dann sinnvoll, wenn es Daten gibt, die selten geändert werden (in1 : statische Daten), und Daten, die häufiger geändert werden (in2 : dynamische Daten). Wird in1 geändert, kann man automatisch eine spezialisierte Programmversion erzeugen, diese dann auf den sich ändernden Daten in2 ausführen bis sich in1 wieder ändert.
Beispiel, bei dem eine solche Vorgehensweise angebracht ist :
Man hat ein Programm, das Polynome graphisch darstellen soll. Erzeugt man für ein Polynom eine schnelle Version zur Berechnung des Wertes an einer Stelle x (ähnlich im Beispiel zu xn), kann die Funktion natürlich wesentlich schneller dargestellt werden. Soll ein weiteres Polynom gezeichnet werden, erzeugt man wiederum eine schnelle spezielle Funktion zur Wertberechnung.

Es ist auch manchmal der Fall, daß die Zeit zur Erzeugung des Spezialprogrammes und die Laufzeit desselben kleiner ist, als die Ausführung des allgemeineren Programms. Dann lohnt sich die Spezialisierung immer, auch wenn sich alle Daten häufig ändern.