Die Standard-Haskell-Klassen -Seite sagt Folgendes über reads :: (Read a) => String -> [(a,String)]
:
Normalerweise gibt ein Parser eine Singleton-Liste mit einem Wert von zurück Geben Sie a ein, das aus der Eingabezeichenfolge und der verbleibenden Zeichenfolge gelesen wurde das folgt, was geparst wurde. Wenn jedoch kein Parsen möglich war, Ergebnis ist die leere Liste, und wenn es mehr als eine mögliche Analyse gibt (eine Ambiguität), die resultierende Liste enthält mehr als ein Paar.
Unter welchen Situationen oder Beispielen manifestiert sich diese Ambiguität?
In diesem Beispiel versucht der Parser, Int
und Double
zu analysieren. Wenn es für beide analysiert werden kann, gibt der Parser zwei Werte zurück.
Ergebnis:
%Vor%und
%Vor% Der einfachste Weg, um Mehrdeutigkeiten zu beheben, besteht darin, einen Parse auszuwählen, indem Sie Auswahloperator +++
mit dem selektive Wahl <++
.