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

使用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
谢谢使用!

这个简单的命令行计算器可以进行基本的算术运算,并且能够处理一些错误情况,例如除零错误和无效的输入。你可以根据实际需求进行扩展和修改。