私は今作成して印刷しようとしているこれらのデータ型を定義しました。Haskell - 正しい出力を得るためにショーを変更する方法
["A","B"] -- [TNonTerminal]
"abc" -- [TTerminals]
"A" -- TNonTerminal
["A"->["aaB"] --
,"A"->["ccB"]
,"B"->["bB"] -- [Rule]
,"B"->["#"]
] --
がどのように変更する必要があります(私はタイプRightLinearGrammarを作成し、putStr $ show rlg
と呼ば明確化のために)
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"
を作成し、私はこの出力を取得しますこのようなより良い出力を得るためのコードですか?
A,B
a,b,c
A
A->aaB
A->ccB
B->bB
B->#
というように書き直すことを検討してください。 intersperseやconcatのような機能が存在することは知らなかった。 – Dracke
私は 'intercalate'を使うように更新しました。これは' concat $ intersperse xs xss'の省略形です。 –