Befehlsumwandlung
Eine Zeichenkette umwandeln
Ziel ist es, eine Zeichenkette in einen Bewegungsbefehl umzuwandeln. Der folgende REPL-Dialog zeigt das gewünschte Verhalten der zu implementierenden
Funktion toBefehl
sowie einer Hilfsfunktion toMaybeBefehl
.
REPL-Dialog 1:
> toMaybeBefehl "RE"
Just RE : Maybe Befehl
> toMaybeBefehl "VW 3"
Just (VW 3) : Maybe Befehl
> toMaybeBefehl "xxx"
Nothing : Maybe Befehl
> toMaybeBefehl "VW x"
Nothing : Maybe Befehl
> toMaybeBefehl " LI"
Nothing : Maybe Befehl
> toMaybeBefehl "VW 4"
Nothing : Maybe Befehl
REPL-Dialog 2:
> toBefehl "VW -1"
VW -1 : Befehl
> toBefehl "RE"
RE : Befehl
> toBefehl "RE "
VW 0 : Befehl
> toBefehl "VW o"
VW 0 : Befehl
> toBefehl "VW 1"
VW 0 : Befehl
Beachte, dass wir hier sehr kleinkariert sind und keine zusätzlichen Leerzeichen erlauben.
Der folgende Quelltext liefert ein Programmgerüst.
module TestMaybe exposing (..)
type Befehl
= LI -- links
| RE -- rechts
| VW Int -- vorwärts ...
toMaybeBefehl: String -> Maybe Befehl
toMaybeBefehl z =
case z of
"LI" -> ...
"RE" -> ...
_ ->
if String.startsWith "VW" z then
let
maybeint = z |> String.dropLeft 3 |> String.toInt
in
case maybeint of
Just x -> ...
Nothing -> ...
else
...
toBefehl: String -> Befehl
toBefehl z =
...
Aufgabe 1
Analysiere den Quelltext und ergänze die fehlenden Teile. Teste die Funktionen mit Funktionsaufrufen wie in den oben gezeigten REPL-Dialogen.
Aufgabe 2
Wenn du fit bist, dann wandle eine Zeichenkette mit einer Liste von Befehlen in folgender Weise um:
> toBefehlsliste "RE VW -1 LI LI VW 2"
[RE,VW -1,LI,LI,VW 2] : List Befehl