Come posso riordinare queste # funzioni F di dare un senso?
-
09-10-2019 - |
Domanda
ho pensato di andare d'accordo bene con F # da quando sono decente a Haskell, ma mi sento come se fossi perplesso da questioni semplici morti. Ho qualche codice di analisi per un parser JSON semplice, in questo modo:
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
...
che non funzionano, perché parseObject non sapere parseValue. non li può invertire uno o avrei avuto il problema opposto. Allora, cosa dovrei fare qui?
Soluzione
Si definiscono reciprocamente funzione ricorsiva utilizzando la parola chiave and
. In questo modo:
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
...
Altri suggerimenti
Provare a sostituire il secondo con let rec
and
per definire una serie di href="http://msdn.microsoft.com/en-us/library/dd233232.aspx" reciprocamente funzioni ricorsive .
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow