Comment puis-je réorganiser ces fonctions F # pour donner un sens?
-
09-10-2019 - |
Question
Je pensais que je serais bien avec se entendre F # depuis que je suis décent à Haskell, mais je sens que je suis déconcerté par des problèmes d'être de simples morts. J'ai un code d'analyse syntaxique pour un analyseur de JSON simple, comme ceci:
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
...
Ce ne fonctionnera pas, parce parseObject ne sait pas parseValue. Ne les inversent soit ou je reçois le problème opposé. Alors, que dois-je faire ici?
La solution
Vous définissez la fonction récursive mutuellement en utilisant le mot-clé and
. Comme ceci:
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
...
Autres conseils
Essayer le remplacement de votre deuxième let rec
avec and
pour définir un ensemble de href="http://msdn.microsoft.com/en-us/library/dd233232.aspx" mutuellement fonctions récursives .
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow