开发者

How can I reorder these F# functions to make sense?

开发者 https://www.devze.com 2023-01-20 21:39 出处:网络
I thought I\'d be getting along alright with F# since I\'m decent at Haskell, but I feel like I\'m being stumped by dead simple issues.I have some parsing code for a simple JSON parser, like this:

I thought I'd be getting along alright with F# since I'm decent at Haskell, but I feel like I'm being stumped by dead simple issues. I have some parsing code for a simple JSON parser, like this:

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
 ...

T开发者_运维问答hat won't work, because parseObject doesn't know about parseValue. Can't reverse them either or I'd get the opposite problem. So what am I supposed to do here?


You define mutually recursive function using the and keyword. Like this:

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
 ...


Try replacing your second let rec with and to define a set of mutually recursive functions.

0

精彩评论

暂无评论...
验证码 换一张
取 消