2

正しい文字列の変換に苦労しています。数式(基本的には文字列)を評価するgetEvalというメソッドがあり、次のように取得します。

*Main> getEval "3+6"
Right "9"

getEvalのタイプは

*Main> :t getEval "3+6"
getEval "3+6"
:: (Functor m, Control.Monad.CatchIO.MonadCatchIO m) =>
   m (Either InterpreterError String)

getEvalは次のようになります。

getEval str = runInterpreter $ setImports ["Prelude"] >> eval str

重要な場合、getEvalはHaskellのヒントライブラリ(Language.Haskell.Interpreter)のevalを使用して、実際の解析と計算を行います。どうすればこれをフロートに入れることができますか?

4

2 に答える 2

2
getEval str = do
        Right res <-  Interpreter.runInterpreter (Interpreter.setImports
                ["Prelude"] >> Interpreter.interpret str (Interpreter.as ::
                Float))
        return res
于 2012-12-14T21:32:09.317 に答える
-2
case getEval "3+6" of
  Right value  = read value :: Float
  Left  errstr = error ("Interpreter error" ++ errstr)

あなたが期待していることをするべきです。エラーの解析readsPrecが心配な場合は、おそらく同様に確認することをお勧めします。Read

于 2012-12-14T19:50:56.730 に答える