Programing in Haskell / Chapter.8 Exercise (2)
Programing in Haskell(http://www.amazon.co.jp/dp/0521692695) P.85~86
Chapter8は、いつか読み直す。それなりに理解できたからOK
指数計算の部分は、名前をつける部分を見ようとしたら、カンニングしてしまった。。でも、そんなに難しくないと思われ
expr :: Parser Int expr = do t <- term do symbol "+" e <- expr return ( t + e ) +++ do symbol "-" e <- expr return ( t - e ) +++ return t term :: Parser Int term = do f <- factor do symbol "*" t <- term return (f * t) +++ do symbol "/" t <- term return ( f `div` t ) +++ return f factor :: Parser Int factor = do a <- atom do symbol "^" f <- factor return ( a ^ f ) +++ return a atom :: Parser Int atom = do symbol "(" e <- expr symbol ")" return e +++ natural eval :: String -> Int eval xs = case parse expr xs of [( n, [] )] -> n [(_, out )] -> error ("unused input " ++ out) [] -> error "invalid input"