1

これが私の新しいメインerror: parse error on input '->' で、エラーの場所をコメントしました。どこかのインデントエラーでしょうか?

main :: IO()
main = do
  expression <- evaluate_input
  putStrLn $ show $ compute expression

evaluate_input :: IO ()
evaluate_input = do
  args <- getArgs
  case args of
    a:s -> return a
    -> do putStrLn "Enter Expression or 'end' to exit calculator"
           hFlush stdout
           getLine
           unless (expression -> "end") $ showExpr expression --error here
  where
    showExpr expression = do putStrLn $ evaluateExpr expression
                        evaluate_input
evaluateExpr :: String -> String
evaluateExpr = show
4

1 に答える 1

3

コードに関するいくつかの問題

  • until正しく使用されていません。同じアクションを何度も繰り返さなければならないときは、再帰する方が良いと思います。のモナディックバージョンを作成しuntilて使用できます。
  • getArgsメイン内で一度使用することをお勧めします。毎回繰り返す必要はありません。

修正版はこちらです。すべての関数を実装したわけではないので、式の解析と評価という大変な作業を行う必要があります。

import Control.Monad (unless)

main :: IO ()
main = evaluate

evaluate :: IO ()
evaluate = do
  putStrLn "Enter Expression"
  expr <- getLine
  unless (expr == "end") $ showExpr expr
 where
   showExpr expr = do putStrLn $ evaluateExpr expr
                      evaluate

evaluateExpr :: String -> String
evaluateExpr = show
于 2013-02-25T05:28:15.047 に答える