電卓(+,-)
Parsecで電卓を作るべく、空腹に耐え大学で作業。
しかしあまりにも空腹なので何か食料探してくる.....そういえば昼食食べずに家でてきちゃったからなー
友人の書いたものを参考に
http://keichi.net/
まずは整数同士で。
とりえあず足し算引き算を実装。
import Text.Parsec import Text.Parsec.String import Control.Applicative hiding (many,(<|>)) main = getLine >>= parseTest calc num :: Parser Float num = read<$>many1 digit calc :: Parser Float calc = do a <- num b <- many ((char '+' >> num >>=return.(+)) <|> (char '-' >> num >>=return.flip (-)) ) return $ foldr ($)a b
中途半端にAppilicative。
これだけで連続計算ができるってすごいですね!
あとは乗除、()、小数点か。
まずは乗除ですね。
素の場合、和差より優先度が高いので、先に実行されるように、calcから呼び出すような形式をとったら良さそう。