理にかなってこれらの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