Hallo Volker,
Was bewirkt „vor“ genau? Die Antwort auf diese Frage
ist wichtig.
Der Roboter soll einen Schritt vorwärst gehen.
OK.
Die „Niki-Umgebung“ kennt keine (sichtbare, verwendbaren)
Variablen, deshalb wird als Lösung diese rekursive Variante
angeboten.
Alles klar, mit diesem Hintergrund gibt die Sache Sinn.
Guck Dir das folgende Schema an – dann verstehst Du sicher sofort, was passiert (die Zeilen, die abgearbeitet werden, sind fett markiert):
**prueffrei;**
IF NOT frei THEN [vor;
--------------------
| **prueffrei;**
|
| IF NOT frei THEN [vor;
| -------------------
| | **prueffrei;**
| |
| | IF NOT frei THEN [vor;
| | -------------------
| | | **prueffrei;**
| | |
| | | IF NOT frei THEN [vor;
| | | -------------------
| | | | **prueffrei;**
| | | |
| | | | IF NOT frei THEN [vor;
| | | | -------------------
| | | | | **prueffrei;**
| | | | |
| | | | | IF NOT frei THEN [umdrehen
| | | | | end
| | | | | ELSE
| | | | | begin
| | | | | ...
| | | | | end
| | | | -------------------
| | | | **vor**
| | | | end
| | | -------------------
| | | **vor**
| | | end
| | -------------------
| | **vor**
| | end
| -------------------
| **vor**
| end
--------------------
**vor**
end
Schreibst Du alle Zeilen, die abgearbeitet werden, nochmal untereinander…
**pruef\_frei** (Prüfung ergibt "frei")
**vor**
**pruef\_frei** (Prüfung ergibt "frei")
**vor**
**pruef\_frei** (Prüfung ergibt "frei")
**vor**
**pruef\_frei** (Prüfung ergibt "frei")
**vor**
**pruef\_frei** (Prüfung ergibt "frei")
**vor**
**pruef\_frei** (Prüfung ergibt "NICHT frei")
**umdrehen**
**vor**
**vor**
**vor**
**vor**
**vor**
…siehst Du, dass sich der Roboter genau fünf mal in Richtung seiner Nase bewegt, sich dann umdreht, und sich anschließend abermals genau fünf Schritte in Richtung seiner Nase bewegt (wobei er jetzt relativ zum Tisch _zurück_geht).
Ist es jetzt klarer geworden?
Mit freundlichem Gruß
Martin