使用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”。
