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?

War es hilfreich?

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