Automatisierung der Befehlsausführung
Eine Implementierung ergänzen
Die im letzten Abschnitt entwickleten Zustandsänderungen bei der Ausführung von Befehlen nutzen wir jetzt (in verallgemeinerter Form), um die Ausführung eines kompletten Programms zu programmieren. der folgende Quelltext liefert das Grundgerüst.
type Befehl
= LI -- links
| RE -- rechts
| VW Int -- vorwärts ...
<p>type alias Programm = List Befehl</p>
<p>type Richtung<br />
= N -- Norden<br />
| O -- Osten<br />
| S -- Süden<br />
| W -- Westen</p>
<p>type alias Akteur = (Int, Int, Richtung) </p>
<p>type alias Zustand = (Akteur, Programm)</p>
<p>programm1: Programm<br />
programm1 = [VW 2, RE, VW 4, LI, VW 2]</p>
<p>akteur: Akteur<br />
akteur = (0,0,N)</p>
<p>zustand: Zustand<br />
zustand = (akteur, programm1)</p>
<p>exeProgramm: Zustand -> Zustand<br />
exeProgramm ((posx, posy, richtung), programm) =<br />
case programm of<br />
[] -><br />
((posx, posy, richtung), programm) -- (1)<br />
befehl::restProgramm -><br />
case befehl of<br />
LI -><br />
case richtung of<br />
N -> exeProgramm ((posx, posy, W), restProgramm) -- (2)<br />
O -> ...<br />
S -> ...<br />
W -> ...<br />
RE -><br />
case richtung of<br />
N -> exeProgramm ((posx, posy, O), restProgramm) -- (3)<br />
O -> ...<br />
S -> ...<br />
W -> ...<br />
VW x -><br />
case richtung of<br />
N -> exeProgramm ((posx, posy+x, N), restProgramm) -- (4)<br />
O -> ...<br />
S -> ...<br />
W -> ...</p>
<p>test =<br />
exeProgramm (akteur, programm1)<br />
> test
((4,4,N),[]) : Zustand
Aufgabe 1
Analysiere den Quelltext und erkläre die mit (1)..(4) markierten Programmzeilen.
Aufgabe 2
Ergänze die fehlenden Teile im Quelltext. Teste anschließend mit unterschiedlichen Daten.