2008-11-26 101 views

回答

3

我不确定你的意思,但是如果你有一个表达式数据类型,你可以定义一个递归的eval函数。在这种情况下,eval意味着简化。

例如,

data Exp = Lit Int 
     | Plus Exp Exp 
     | Times Exp Exp 

eval :: Exp -> Int 
eval (Lit x)  = x 
eval (Plus x y) = eval x + eval y 
eval (Times x y) = eval x * eval y 

一旦你添加变量的语言它变得非常有趣,但是这是一个表达式求值的最基本的形式。

0

模块expr其中

- 变量由字符串命名,假设为标识符。 类型变量=字符串

- 表达式的表达。数据Expr = Const整数 | Var变量 | Plus Expr Expr |减号Expr Expr | MULT Expr的Expr的 导出(式,显示)

及其简化诸如0 * E = E * 0 = 0 和1 * E = E * 1 = 0 + E = E + 0 = E-0 = e和简化常量子表达式,例如Plus(Const 1)(Const 2)将变为Const 3.我不希望将变量(或变量和常量)连接在一起:Var“st”是Var“s”中的一个独特变量。 (Plus(Var'x')(Const 0))= Var“x”