Wie kann ich neu ordnen diese F # Funktionen Sinn zu machen?
-
09-10-2019 - |
Frage
Ich dachte, ich entlang gut mit F # bekommen würde, da ich bei Haskell anständig bin, aber ich fühle mich wie ich tot einfache Fragen ratlos bin zu werden. Ich habe einige Parsing-Code für einen einfachen JSON-Parser, wie diese:
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
...
Das wird nicht funktionieren, weil parseObject nicht weiß, über parseValue. Kann sie nicht entweder umkehren oder ich würde das entgegengesetzte Problem bekommen. Also, was soll ich hier tun?
Lösung
Sie definieren sich gegenseitig rekursive Funktion mit dem and
Schlüsselwort. Wie folgt aus:
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
...
Andere Tipps
Versuchen Sie, Ihren zweiten let rec
mit and
ersetzt eine Reihe von gegenseitig rekursive Funktionen zu definieren .
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow