Imparare ad usare la libreria Parsec, parte dei compiti.Haskell Parsec salta tutte le parole che non sono predefinite
MODIFICA: I suggerimenti per utilizzare altre librerie sono benvenuti, il punto è l'analisi.
Quello che voglio è estrarre tutte le parole con una lettera maiuscola e quattro direzioni della bussola da qualsiasi frase. Esempio: "Il Belgio si trova totalmente a sud dell'Olanda". dovrebbe trovare e restituire "Belgio Olanda meridionale".
Quello che non riesco a capire è come ignorare (mangiare) qualsiasi input che non sia una direzione della bussola. Stavo cercando di trovare qualcosa sulla falsariga di
'many (not compassDirection >> space)'
ma g (h) oogle non mi sta aiutando.
Il seguente codice è ovviamente bloccato sulla funzione "molti".
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
(Proprio stilisticamente, potresti scrivere 'compassDirection = choice $ map stringa [" nord "," sud "," est "," ovest "]'.) – huon
Complimenti per essere onesti, chiari, mostrando un buon sforzo per risolvere il problema fino ad ora e fornire il codice esistente. Una buona domanda +1 – AndrewC