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?

Était-ce utile?

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
scroll top