宿題の一部であるParsecライブラリの使い方を学ぶ。
編集:他のライブラリを使用する提案は大歓迎です。要点は構文解析です。
私が欲しいのは、大文字ですべての単語を抽出し、任意の文から4つのコンパスの方向を抽出することです。例:「ベルギーは完全にオランダの南にあります。」「BelgiumsouthHolland」を見つけて返す必要があります。
私が理解できないのは、コンパスの方向ではない入力を無視(食べる)する方法です。私はの線に沿って何かを見つけようとしていました
'many (not compassDirection >> space)'
しかし、g(h)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