gpt4 book ai didi

algorithm - 状态解析的替代方案

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:50:21 25 4
gpt4 key购买 nike

我不喜欢状态解析。在我看来应该有更好的方法。 有吗?

让我举个例子。假设我正在解析一个文本文件(在本例中为 YAML,但它可以是纯文本或 XML。我正在制作一个简单的问答游戏;我的游戏将包含 setquestion,每个都有两个或更多的answer。在 YAML 中,我可能会像这样构造我的文件:

set:
name: math questions
question:
text: 1 + 1 = ?
answer: 3
answer: 4
best-answer: 2
question:
text: 2 * 3 = ?
answer: 5
best-answer: 6
set:
name: chemistry questions
question:
text: the valence of a Chlorine free radical is?
answer: 1
answer: 0
best-answer: -1
question:
text: Xeon is a noble gas
best-answer: true
answer: false

(我有一段时间没有使用 YAML,如果它是伪 YAML,我深表歉意。)当我解析时,如果我阅读当前行并看到“answer: ...”,我必须知道我我正在回答一组问题。

这往往是非常有状态的代码,例如:

if (currentLine starts with "answer")
currentQuestion.addAnswer(...)
else if (currentLine starts with "question")
currentQuestion = new question
...

在解析的任何时候,我们都需要对当前对象的引用,该对象可能嵌套在其他几个对象中。

部分问题可能是我的主循环逐行遍历每一行。另一种方法可能是只读取该行,并根据它是什么,再读取几行根据需要行。

那么,我的问题又来了:是否有一种无状态的方法来解析数据?我觉得可能存在一种比我通常使用的方法更清晰、更易于阅读/理解/编写代码的方法对所有文本行进行有状态的 for 循环。

最佳答案

您显然不是在寻找“无状态”解析,而是在寻找非强制性的纯函数解析。当然,总有某种状态,但是使用函数式方法,您的状态是完全隐含的。

看看"Functional pearls: monadic parsing in Haskell"文章,并查看各种类似 Parsec 的解析组合器库,它们存在于 Java 和 C++ 等命令式语言中。

关于algorithm - 状态解析的替代方案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7549437/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com