欢迎访问宙启技术站
智能推送

使用Haskell编写一个简单的计算器应用程序

发布时间:2023-12-09 17:37:07

下面是一个使用Haskell编写的简单计算器应用程序。

import Text.Read (readMaybe)

data Operator = Add | Subtract | Multiply | Divide

calculate :: Operator -> Float -> Float -> Float
calculate Add x y = x + y
calculate Subtract x y = x - y
calculate Multiply x y = x * y
calculate Divide x y = x / y

parseOperator :: String -> Maybe Operator
parseOperator "+" = Just Add
parseOperator "-" = Just Subtract
parseOperator "*" = Just Multiply
parseOperator "/" = Just Divide
parseOperator _ = Nothing

evaluate :: String -> Maybe Float
evaluate expr = case words expr of
  [x, op, y] -> do
    num1 <- readMaybe x
    num2 <- readMaybe y
    operator <- parseOperator op
    return $ calculate operator num1 num2
  _ -> Nothing

main :: IO ()
main = do
  putStrLn "Enter an expression (e.g. 5 + 3):"
  expr <- getLine
  case evaluate expr of
    Just result -> putStrLn $ "Result: " ++ show result
    Nothing -> putStrLn "Invalid expression"

这个程序通过递归地解析输入的表达式,并使用Haskell的定义数据类型和模式匹配来执行相应的操作。首先,calculate函数接受一个运算符和两个浮点数,并根据运算符执行相应的计算操作。parseOperator函数将输入的字符串运算符解析为相应的 Operator数据类型。evaluate函数将输入的表达式解析为操作数和运算符,并利用 calculate函数进行计算。最后,main函数负责从用户获取表达式,并调用evaluate函数进行计算并打印结果。

下面是一个使用例子:

Enter an expression (e.g. 5 + 3):
9 * 2
Result: 18.0

Enter an expression (e.g. 5 + 3):
10 / 0
Invalid expression

在第一个例子中,用户输入了9 * 2,程序计算出结果18.0并将其打印出来。在第二个例子中,用户尝试除以0,这是一个无效的表达式,因此程序输出“Invalid expression”。