Lernen, die Parsec-Bibliothek zu verwenden, Teil der Hausaufgaben.Haskell Parsec überspringen Sie alle Wörter, die nicht vordefiniert
EDIT: Vorschläge zur Verwendung anderer Bibliotheken sind willkommen, der Punkt ist das Parsen.
Was ich will, ist, alle Wörter mit einem Großbuchstaben und vier Himmelsrichtungen aus jedem Satz zu extrahieren. Beispiel: "Belgien liegt total südlich von Holland." sollte "Belgien Südholland" finden und zurückgeben.
Was ich nicht herausfinden kann ist, wie man jeden Input ignoriert, der nicht Kompassrichtung ist. Ich suchte etwas entlang der Linien von
'many (not compassDirection >> space)'
zu finden, aber g (h) oogle hilft mir nicht.
Der folgende Code ist offensichtlich auf der 'viele' Funktion fest.
readExpr :: String -> String
readExpr input = case parse (parseLine) "" input of
Left err -> "No match: " ++ show err
Right val -> "Found: " ++ showVal val
parseLine :: Parser GraphValue
parseLine = do
x <- parseCountry
space
many (some (noneOf " ") >> space)
y <- parseCompass
space
many (some (noneOf " ") >> space)
z <- parseCountry
return $ Direction [x,y,z]
compassDirection :: Parser String
compassDirection = string "north" <|>
string "south" <|>
string "east" <|>
string "west"
parseCountry :: Parser GraphValue
parseCountry = do
c <- upper
x <- many (lower)
return $ Country (c:x)
parseCompass :: Parser GraphValue
parseCompass = do
x <- compassDirection
return $ Compass x
(Nur stilistisch könnte man 'compassDirection = Wahl $ map string [" Norden "," Süden "," Osten "," Westen "]'.) – huon
Gut gemacht, um ehrlich zu sein, klar, zeigt gute Anstrengung zu Lösen Sie das Problem bis jetzt und stellen Sie Ihren vorhandenen Code zur Verfügung. Eine gute Frage. +1 – AndrewC