Partielle Auswertung ist eine Form der Programmspezialisierung. Das Ziel ist, aus einem allgemeinen Programm ein effizienteres automatisch zu erzeugen. Bei einem Programm mit mehreren Eingaben, wird ein Teil dieser Eingaben auf einen festen Wert 'eingefroren' und ein spezialisiertes Programm erzeugt, das auf dem Rest der Eingabe läuft. Die Programme werden hierbei wie Funktionen behandelt. Partielle Auswertung hat den Vorteil komplett automatisiert werden zu können.
'normale Programmausführung'
' Programmausführung mit partieller Auswertung'
Dem partiellen Auswerter 'mix' wird das Programm
p mit einem Teil seiner Eingabe
in1 übergeben (es kann sich natürlich um eine mehrdimensionale Eingabe handeln) und daraus ein Programm
pin1 erzeugt, dem die restliche Eingabe übergeben wird. In beiden Bildern sollte natürlich die Ausgabe dieselbe sein.
Beispiel :
Ein 2- Eingabe Programm
p =
f(n,x)=
if n=0 then 1
else if even(n) then f(n/2,x)^2
else x*f(n-1,x)
Programm p, spezialisiert auf die statische Eingabe n=5
p5 = f5(x) = x*((x^2)^2)
p5 wird durch Vorausberechnung aller Ausdrücke, die von n abhängen, erzeugt.
Optimierung ist hier möglich, da die Programmkontrolle durch n gesteuert wird. Würde man versuchen x zu fixieren, würde man kaum (wenn überhaupt) optimierten Code erhalten.