所以我有一个逻辑语句,如“((A o B)a B)o(B a C)”,我想将括号内的每组语句解析为列表中的每个部分...这里是我迄今为止所拥有的,但是因为我是哈斯克尔的新手,所以我不知道我是否在正确的轨道上 编辑:我现在又来了。 所以问题现在是两件事!! (1)我无法返回字符串列表 (2)当我现在运行时,我会意外地发现'('
statement :: Parser String
statement = many (letter <|> space ) >> parenStatement
parenStatement :: Parser [String]
parenStatement = do
char '('
answer <- statement
char ')'
return answer
答案 0 :(得分:3)
据推测,您有一些代表逻辑陈述的数据类型。
data Statement = Conjunction Statement Statement
| Disjunction Statement Statement
-- etc
据推测,您最终希望能够解析逻辑语句。
statement :: Parser Statement
statement = conjunction <|> disjunction <|> parenthesisisedStatement -- etc
解析括号括起来的语句只是
parenthesisisedStatement :: Parser Statement
parenthesisisedStatement = do
char '('
answer <- statement
char ')'
return parenthesisisedStatement
修改(因为这不符合评论)
您似乎正在尝试标记您的输入字符串到一个字符串列表中(以后您可能会将其输入解析器)。您似乎没有尝试解析您的输入字符串到一个正确约束它可能包含的数据结构。
如果你真的想要标记你的输入,我建议再次提出一个新的顶级问题。
但您最好解析您的输入到正确的数据结构中,因此考虑如何最好地表达语句和 don't just use { {3}} 强>