Cod*_*num 4 f# functional-programming mutual-recursion
我以为我会和F#相处得很好,因为我在Haskell很体面,但我觉得我被一些简单的问题所困扰.我有一些简单的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
...
Run Code Online (Sandbox Code Playgroud)
这不起作用,因为parseObject不知道parseValue.不能扭转他们或我会遇到相反的问题.那我该怎么办呢?
sep*_*p2k 11
您可以使用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
...
Run Code Online (Sandbox Code Playgroud)