使用Haskell编写一个简单的命令行计算器
发布时间:2023-12-09 22:27:45
下面是一个使用Haskell编写的简单命令行计算器的示例代码:
import Text.Read (readMaybe)
-- 计算器函数
calculator :: Double -> Double -> Char -> Maybe Double
calculator x y '+' = Just (x + y)
calculator x y '-' = Just (x - y)
calculator x y '*' = Just (x * y)
calculator x y '/' = if y == 0 then Nothing else Just (x / y)
calculator _ _ _ = Nothing
-- 主函数
main :: IO ()
main = do
putStrLn "欢迎使用命令行计算器!"
putStrLn "请按照以下格式输入计算表达式:"
putStrLn "<数字> <运算符> <数字>"
putStrLn "支持的运算符:+ - * /"
putStrLn "示例:2 + 3"
putStrLn "输入 q 退出"
-- 读取用户输入
input <- getLine
-- 判断是否退出
if input == "q" then
putStrLn "谢谢使用!"
else do
-- 解析输入
let parts = words input
if length parts /= 3 then
putStrLn "输入无效,请按照正确格式输入!"
else do
let x = readMaybe (parts !! 0)
let op = head (parts !! 1)
let y = readMaybe (parts !! 2)
-- 进行计算
case (x, y) of
(Just a, Just b) -> case calculator a b op of
Just result -> putStrLn ("结果:" ++ show result)
Nothing -> putStrLn "无效的运算符或除数为零!"
_ -> putStrLn "输入无效,请输入数值!"
-- 递归调用主函数,循环执行
main
这个计算器程序首先打印一个欢迎消息和使用说明,然后进入一个循环,等待用户输入计算表达式。用户可以输入一个空格分隔开的计算表达式,例如 2 + 3,程序将会解析这个表达式,计算结果并打印出来。
程序的计算功能是通过calculator函数实现的。它接受两个数字和一个运算符,并使用模式匹配来判断要执行的操作。根据给定的运算符,它执行相应的数学操作并返回结果。在除法操作中,会检查第二个数字是否为零,如果是则返回Nothing表示计算无效。
解析用户输入的功能使用了readMaybe函数,它可以将字符串转换为Maybe类型的值,如果转换成功则返回Just包装的结果,否则返回Nothing。通过这种方式,我们可以断言用户输入的是一个数字而不是其他字符。
最后,使用main函数来执行主程序。它首先打印欢迎消息和使用说明,然后进入一个递归调用的循环,等待用户的输入。如果用户输入了q,则退出程序,否则解析用户的输入并进行计算。计算结果会打印到控制台上。
以下是程序的使用示例:
欢迎使用命令行计算器! 请按照以下格式输入计算表达式: <数字> <运算符> <数字> 支持的运算符:+ - * / 示例:2 + 3 输入 q 退出 2 + 3 结果:5.0 2 * 3 结果:6.0 4 / 0 无效的运算符或除数为零! a + b 输入无效,请输入数值! q 谢谢使用!
这个简单的命令行计算器可以进行基本的算术运算,并且能够处理一些错误情况,例如除零错误和无效的输入。你可以根据实际需求进行扩展和修改。
