如何重新排序这些f#函数以使其有意义?
-
09-10-2019 - |
题
我以为我在哈斯克尔(Haskell)很体面,我会和F#相处得很好,但是我觉得自己被死去的简单问题所困扰。我有一些简单的JSON解析器的解析代码,例如:
let rec parseObject tokens = function
| '"' :: cs -> parseString tokens cs
| ':' :: cs -> parseValue tokens cs
| '}' :: cs -> tokens, cs
...
let rec parseValue tokens = function
| c :: cs when Char.IsWhiteSpace(c) -> parseValue tokens cs
| '{' :: cs -> parseObject tokens cs
...
那是行不通的,因为parseobject不了解parsevalue。也无法扭转它们,否则我会遇到相反的问题。那我应该在这里做什么?
解决方案
您使用 and
关键词。像这样:
let rec parseObject tokens = function
| '"' :: cs -> parseString tokens cs
| ':' :: cs -> parseValue tokens cs
| '}' :: cs -> tokens, cs
...
and parseValue tokens = function
| c :: cs when Char.IsWhiteSpace(c) -> parseValue tokens cs
| '{' :: cs -> parseObject tokens cs
...
其他提示
尝试更换第二个 let rec
和 and
定义一组 相互递归的功能.
不隶属于 StackOverflow