人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

haskellでパーサーを書いていて問題に出くわしました
次のように数値をパースして返す関数を書いていたら
"100hoge"の様に先頭だけ数値の場合でもパースして結果を返します
100 * 200 の様に演算子を使うようになる頃には
これを解決しないと先に進めなくなったので
きちんと解決したいと思っています
お力を貸していただければ幸いです

import Numeric
import Control.Monad
import Text.ParserCombinators.Parsec

data RVal = RArray [RVal]
| RNumber Double
| RBool Bool
| RString String
| RRegExp String [Char]
deriving(Show)

-- 数値
p_numeric :: Parser RVal
p_numeric = try p_double <|> p_int
where
p_int = liftM (RNumber . read) $ many1 digit
p_double = do a <- many1 digit
c <- char '.'
b <- many1 digit
return $ (RNumber . read) (a++[c]++b)

-- 入力1
-- parseTest "100" p_numeric
-- 出力1
-- RNumber 100.0
--
-- 入力2
-- parseTest "100hoge" p_numeric
-- 出力2
-- RNumber 100.0


●質問者: babanba_n
●カテゴリ:コンピュータ
○ 状態 :キャンセル
└ 回答数 : 0/0件

回答がありません
関連質問

●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ