適当入門
現在『ふつうのHaskell』を片手に勉強中。
とりあえず言語を最初に学ぶときは電卓を作る。
というのが自分の言語の学び方なので作ってみた。
うーむ、Haskellらしい書き方ってのがイマイチ理解できていない......
まぁ、最初だから適当にでっち上げれば良いか。
import Text.ParserCombinators.Parsec main = catch (sequence_ $ repeat evalLine) (const $ return()) evalLine = do line <- getLine let exec = parse addp "" line case exec of Right v -> print v ; Left _ -> return() atomp = between (many space) (many space) $ between (char '(') (char ')') addp <|> (many1 digit>>=return.read) mulp = atomp>>= loop where f c g = char c >> atomp >>= loop.g loop v = f '*' (v*) <|> f '/' (div v) <|> f '%' (mod v) <|> return v addp = mulp >>= loop where f c g = char c >> mulp >>= loop.g loop v = f '+' (v+) <|> f '-' (v-) <|> return v
とりあえずParsec使うと構文の解析が異常に楽になった。