Ich habe diese Datentypen definiert, die ich jetzt erstellen und drucken möchte.Haskell - wie man die Show ändert, um die richtige Ausgabe zu erhalten
type TNonTerminal = String -- will be creating own ones where [A-Z] won't be enough
type TTerminals = Char
type TSymbols = String -- both terminals and nonterminals
data Rule = Rule
{ leftSide :: TNonTerminal
, rightSide :: [TSymbols]
} deriving (Eq)
data RightLinearGrammar = RLG
{ nonterminals :: [TNonTerminal]
, terminals :: [TTerminals]
, firstNonterminal :: TNonTerminal
, rules :: [Rule]
} deriving (Eq)
Also habe ich auch diese anzeigen Instanzen
instance Show Rule where
show (Rule ls rs) = show ls ++ "->" ++ show rs ++ "\n"
instance Show RightLinearGrammar where
show (RLG n t fn r) = show n ++ "\n" ++ show t ++ "\n" ++ show fn ++ "\n" ++ show r ++ "\n"
Und ich bekomme diese Ausgabe (zur Verdeutlichung habe ich den Typ RightLinearGrammar und rief putStr $ show rlg
):
["A","B"] -- [TNonTerminal]
"abc" -- [TTerminals]
"A" -- TNonTerminal
["A"->["aaB"] --
,"A"->["ccB"]
,"B"->["bB"] -- [Rule]
,"B"->["#"]
] --
Wie soll ich ändern der Code, um bessere Ergebnisse zu erzielen?
A,B
a,b,c
A
A->aaB
A->ccB
B->bB
B->#
zu schreiben. Das funktioniert. Wusste nicht, dass solche Funktionen wie intersevers und concat existieren. – Dracke
Ich habe es gerade aktualisiert, um 'intercalate' zu verwenden, was eine Abkürzung für' concat $ intersperse xs xss' ist –