學習使用Parsec庫,作業的一部分。Haskell Parsec跳過沒有預定義的所有單詞
編輯:歡迎使用其他庫的建議,重點是解析。
我想要的是從任何句子中提取大寫字母和四個指南針方向的所有單詞。例如:「比利時完全位於荷蘭南部。」應該找到並返回「比利時南荷蘭」。
我無法理解的是如何忽略(吃)任何不是指南針方向的輸入。 我希望找到沿
'many (not compassDirection >> space)'
但克(1H)oogle是沒有幫助我行的東西。
下面的代碼明顯停留在「多」功能上。
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
(只是風格上,你可以寫'compassDirection =選擇$地圖字符串[「北」,「南」,「東」,「西」]'。) – huon
做得好誠實,清晰,解決目前爲止的問題並提供您現有的代碼。一個很好的問題。 +1 – AndrewC