理にかなってこれらのf#関数を再注文するにはどうすればよいですか?

StackOverflow https://stackoverflow.com/questions/3982531

質問

私は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 recand のセットを定義する 相互に再帰機能.

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top