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

使用纯函数式编程在Haskell中实现一个简单的计算器

发布时间:2023-12-10 05:42:19

在Haskell中,我们可以使用纯函数式编程的思想来实现一个简单的计算器。计算器可以进行基本的加减乘除运算,并支持括号来改变运算的优先级。

首先,我们需要定义一个数据类型来表示表达式。我们可以使用递归的方式来表示一个表达式,其中每个表达式可以是一个数字,或者是两个表达式按照某种运算符进行计算得到的结果。

data Expr = Val Int
          | Add Expr Expr
          | Sub Expr Expr
          | Mul Expr Expr
          | Div Expr Expr

接下来,我们定义一个求值函数来计算表达式的结果。这个函数的类型签名为eval :: Expr -> Int,表示接受一个表达式作为输入,返回一个整数作为输出。我们可以使用模式匹配来处理不同的情况。

eval :: Expr -> Int
eval (Val x) = x
eval (Add expr1 expr2) = eval expr1 + eval expr2
eval (Sub expr1 expr2) = eval expr1 - eval expr2
eval (Mul expr1 expr2) = eval expr1 * eval expr2
eval (Div expr1 expr2) = eval expr1 div eval expr2

现在我们可以使用这个计算器进行一些简单的计算了。

main = do
  let expr1 = Add (Val 2) (Mul (Val 3) (Val 4))
  putStrLn $ show (eval expr1)  -- 输出结果为 14
  
  let expr2 = Sub (Val 10) (Div (Val 20) (Val 2))
  putStrLn $ show (eval expr2)  -- 输出结果为 0

在这个例子中,我们首先构造了一个表达式expr1,表示2 + 3 * 4。然后通过调用eval函数计算表达式的结果,并使用show函数将结果转换成字符串输出。

接着,我们构造了另一个表达式expr2,表示10 - 20 / 2。同样地,我们通过调用eval函数计算表达式的结果,并将结果转换成字符串输出。

通过使用纯函数式编程的思想,在Haskell中实现一个简单的计算器非常简洁和优雅。我们定义了一个表达式类型和一个求值函数,通过模式匹配处理不同的情况。然后,我们可以使用这个计算器进行各种计算,并得到正确的结果。