Я определил эти типы данных, которые я пытаюсь создать и распечатать сейчас.Haskell - как изменить шоу, чтобы получить правильный вывод
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)
Так я и создал эти Показать экземпляры
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"
И я получаю этот выход (для уточнения я создал тип RightLinearGrammar и называется putStr $ show rlg
):
["A","B"] -- [TNonTerminal]
"abc" -- [TTerminals]
"A" -- TNonTerminal
["A"->["aaB"] --
,"A"->["ccB"]
,"B"->["bB"] -- [Rule]
,"B"->["#"]
] --
Как я должен изменить код для получения лучшего результата, как этот?
A,B
a,b,c
A
A->aaB
A->ccB
B->bB
B->#
Это работает. Не знал, что такие функции, как interperse и concat, существуют. – Dracke
Я просто обновил его, чтобы использовать 'intercalate', который является сокращением для' concat $ intersperse xs xss' –