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

使用Haskell创建一个简单的解释器

发布时间:2023-12-09 17:59:38

Haskell是一种强类型的函数式编程语言,它非常适合用于构建解释器。在本例中,我们将创建一个简单的解释器,用于执行四则运算表达式。

首先,我们定义了一个数据类型Expr来表示表达式。它可以是一个数字(使用Val构造函数),或者是一个二元操作符表达式,包含两个子表达式和一个操作符(使用AddSubMulDiv构造函数)。

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

接下来,我们定义一个函数eval来求值一个表达式。该函数通过递归地处理子表达式来计算最终结果。

eval :: Expr -> Int
eval (Val n) = n
eval (Add e1 e2) = eval e1 + eval e2
eval (Sub e1 e2) = eval e1 - eval e2
eval (Mul e1 e2) = eval e1 * eval e2
eval (Div e1 e2) = eval e1 div eval e2

现在,我们可以使用这个解释器来执行任意的四则运算表达式。以下是一些例子和它们的求值结果:

main :: IO ()
main = do
  putStrLn $ show $ eval (Add (Val 1) (Val 2))  -- 输出: 3
  putStrLn $ show $ eval (Sub (Val 5) (Val 3))  -- 输出: 2
  putStrLn $ show $ eval (Mul (Val 4) (Val 6))  -- 输出: 24
  putStrLn $ show $ eval (Div (Val 10) (Val 2)) -- 输出: 5

在这个例子中,我们创建了四个表达式并使用解释器对它们进行求值。每个例子都使用了不同的操作符和操作数,但求值结果都是正确的。

这个简单的解释器只支持四则运算表达式,并且没有考虑除零错误的情况。它可以作为一个基础版本,你可以在其上进行扩展以支持更复杂的表达式和错误处理。