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 ...
type alias Programm = List Befehl
type Richtung
= N -- Norden
| O -- Osten
| S -- Süden
| W -- Westen
type alias Akteur = (Int, Int, Richtung)
type alias Zustand = (Akteur, Programm)
programm1: Programm
programm1 = [VW 2, RE, VW 4, LI, VW 2]
akteur: Akteur
akteur = (0,0,N)
zustand: Zustand
zustand = (akteur, programm1)
exeProgramm: Zustand -> Zustand
exeProgramm ((posx, posy, richtung), programm) =
case programm of
[] ->
((posx, posy, richtung), programm) -- (1)
befehl::restProgramm ->
case befehl of
LI ->
case richtung of
N -> exeProgramm ((posx, posy, W), restProgramm) -- (2)
O -> ...
S -> ...
W -> ...
RE ->
case richtung of
N -> exeProgramm ((posx, posy, O), restProgramm) -- (3)
O -> ...
S -> ...
W -> ...
VW x ->
case richtung of
N -> exeProgramm ((posx, posy+x, N), restProgramm) -- (4)
O -> ...
S -> ...
W -> ...
test =
exeProgramm (akteur, programm1)
> 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.