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

如何在Haskell中实现一个简单的计算器

发布时间:2023-12-10 10:26:35

在Haskell中实现一个简单的计算器可以通过定义一些函数和数据类型来实现。下面是一个示例实现:

-- 定义数据类型表示表达式
data Expr = Num Double
          | Add Expr Expr
          | Sub Expr Expr
          | Mul Expr Expr
          | Div Expr Expr

-- 定义一个解析函数,将输入的字符串解析成表达式
parseExpr :: String -> Expr
parseExpr = go . words
  where
    go [x]     = Num (read x)
    go (x:y:z) = case y of
                   "+" -> Add (go [x]) (go z)
                   "-" -> Sub (go [x]) (go z)
                   "*" -> Mul (go [x]) (go z)
                   "/" -> Div (go [x]) (go z)

-- 定义一个求值函数,计算表达式的结果
evalExpr :: Expr -> Double
evalExpr (Num x)     = x
evalExpr (Add a b)   = evalExpr a + evalExpr b
evalExpr (Sub a b)   = evalExpr a - evalExpr b
evalExpr (Mul a b)   = evalExpr a * evalExpr b
evalExpr (Div a b)   = evalExpr a / evalExpr b

-- 定义一个计算器函数,接收输入的表达式字符串并返回结果
calculator :: String -> Double
calculator = evalExpr . parseExpr

现在我们可以使用这个计算器函数进行计算,例如:

main :: IO ()
main = do
  putStrLn "请输入一个表达式:"
  expr <- getLine
  let result = calculator expr
  putStrLn ("结果为:" ++ show result)

这个程序会提示用户输入一个表达式,然后计算表达式的结果并打印出来。

以下是一些示例输入和输出:

请输入一个表达式:
2 + 3 * 4
结果为:14.0

请输入一个表达式:
(2 + 3) * 4
结果为:20.0

请输入一个表达式:
10 / 3
结果为:3.3333333333333335

上述程序只实现了基本的四则运算,对于复杂的数学函数(如三角函数、指数函数等)还需要进行扩展。