- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
所以...我弄乱了 CSV 格式的录音:
23,95489,0,20,9888
由于语言设置, float 是用逗号作为分隔符编写的...在逗号分隔值文件中...
问题是该文件没有为每个浮点提供良好的格式。有些根本没有意义,而且意义后面的数字个数也各不相同。
我的想法是构建一个 MegaParsec
解析器,它会尝试读取所有可能的浮点格式,继续前进,如果发现错误则返回。
例如上面的例子:
guard
检查))我已将其实现为(此处为伪代码):
floatP = try pointyFloatP <|> unpointyFloatP
lineP = (,,) <$> floatP <* comma <*> floatP <* comma <*> floatP <* comma
我的问题是,显然 try
仅适用于“当前” float 。没有回溯到之前的位置。这是正确的吗?
如果是这样......我将如何实现进一步的回溯?
最佳答案
How far does “try” back track?
如果p
解析成功,解析器try p
消耗的输入与p
完全相同,否则它根本不消耗任何输入。因此,如果您从回溯的角度来看,它会回溯到您调用它时所在的位置。
My problem is that apparently the try only works in the 'current' float. There is no backtracking to previous positions. Is this correct?
是的,try
不会“取消消耗”输入。它所做的只是从您提供的解析器的故障中恢复,而不消耗任何输入。它不会撤消您之前应用的任何解析器的效果,也不会影响您在 try p
成功后应用的后续解析器。
And if so ... how would I go about implementing further back tracking?
基本上,您想要的不仅是知道 pointyFloatP
在当前输入上是否成功,而且还知道 lineP
的其余部分在成功 pointyFloatP 后是否会成功
- 如果没有,您想回溯到应用 pointyFloatP
之前。所以基本上你需要 try
中整个剩余行的解析器,而不仅仅是浮点解析器。
要实现这一点,您可以使 floatP
将剩余行的解析器作为参数,如下所示:
floatP restP = try (pointyFloatP <*> restP) <|> unpointyFloatP <*> restP
请注意,这种回溯不会非常有效(但我假设您知道这一点)。
关于haskell - "try"回溯了多远?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51483393/
我正在使用 react-native-elements ListItem.Accordion因为我的 React Native 中的所有其他内容 SectionList使用 ListItem s(并且
我是一名优秀的程序员,十分优秀!