LOOP-Programm
LOOP-Programme sind Programme in der Programmiersprache LOOP, einer stark eingeschränkten, modellhaften Sprache, die nur die Formulierung von Additionen, Wertzuweisungen und endlich oft durchlaufenen Schleifen erlaubt. LOOP-Programme spielen in der Theoretischen Informatik eine Rolle, insbesondere in Zusammenhang mit Berechenbarkeit. Eine Funktion heißt LOOP-berechenbar, wenn sie sich als LOOP-Programm formulieren läßt. Die Menge aller LOOP-Programme wird mit bezeichnet.
Eigenschaften
Jede primitiv-rekursive Funktion ist LOOP-berechenbar und umgekehrt.
Im Unterschied zu GOTO-Programmen und WHILE-Programmen terminieren LOOP-Programme immer. Deswegen ist die Menge der durch LOOP-Programme berechenbaren Funktionen eine echte Untermenge der berechenbaren Funktionen (und damit eine Untermenge der durch WHILE- bzw. GOTO-Programme berechenbaren Funktionen).
Ein Beispiel für eine totale Funktion, die berechenbar, aber nicht LOOP-berechenbar ist, ist die Ackermann-Funktion.
Formale Definition
LOOP-Programme bestehen aus den Symbolen LOOP
, DO
, END
, :=
, +
, -
und ;
sowie einer beliebigen Anzahl von Variablen und Konstanten. LOOP-Programme haben folgende Syntax in modifizierter Backus-Naur-Form:
Hierbei sind Variablennamen und Konstanten.
Die in einem LOOP-Programm verwendeten Variablen werden vor Beginn des Programmablaufs mit vorgegeben Initialwerten vorbelegt. Bei der Ausführung von Zuweisungen werden negative Werte implizit durch Nullen ersetzt.
Ein Ausdruck der Form
P1; P2
bedeutet dabei die Hintereinanderausführung der Teilprogramme und in dieser Reihenfolge. Ein Ausdruck der Form
LOOP x DO P END
bedeutet die -fache Ausführung des Teilprogramms , wobei den Wert am Beginn der Abarbeitung darstellt. (Auch wenn durch die Ausführung von verändert wird, wird nur so oft ausgeführt, wie am Anfang war.)
Beispielprogramme
Addition
Das folgende LOOP-Programm weist der Variablen die Summe der Werte der Variablen und zu.
x0 := x1 + 0; LOOP x2 DO x0 := x0 + 1 END
Dabei bekommt zunächst den aktuellen Wert von zugewiesen und wird dann um den Wert von inkrementiert.
Dieses Programm läßt sich als Unterprogramm in anderen LOOP-Programmen verwenden. Solche Verwendungen werden durch eine einfache Erweiterung der ursprünglichen LOOP-Syntax in der Form
x0 := x1 + x2
beschrieben.
Multiplikation
Das folgende LOOP-Programm erhöht den Wert der Variablen um den Wert des Produktes der Werte der Variablen und .
LOOP x1 DO x0 := x0 + x2 END
Das Programm benutzt dabei das im ersten Beispiel definierte Unterprogramm der Addition. Die ausgeführte Multiplikation wird dabei durch das -fache Aufaddieren des Wertes von zum Wert von realisiert.
Simulation von LOOP-Programmen durch WHILE-Programm
Ein jedes LOOP-Programm
LOOP x DO P END
kann durch das folgende WHILE-Programm simuliert werden
y := x WHILE y != 0 DO y := y-1; P END