【发布时间】:2019-04-24 17:33:36
【问题描述】:
If 数据构造函数 (If BoolType Expr Expr) 应该计算布尔表达式(第一个参数),如果为真则返回第二个参数的值,或者返回第三个参数。我可以构造表达式 Expr 的评估,但我不明白如何合并嵌套表达式 BoolType 以评估表达式。有点太曲折了,我无法理解它。
这里有两种数据类型:
data Expr = Val Int
| Add Expr Expr
| Sub Expr Expr
| Mul Expr Expr
| Div Expr Expr
| If BoolType Expr Expr
data BoolType = Lit Bool
| Or BoolType BoolType
| EqualTo Expr Expr
| LessThan Expr Expr
我写了一个评估类型的表达式:
eval :: BoolType -> Bool
eval (Lit n) = n
eval (Or e1 e2) = eval e1 || eval e2
eval (EqualTo e1 e2) = num e1 == num e2
eval (LessThan e1 e2) = num e1 < num e2
num :: Expr -> Int
num (Val n) = n
num (Add e1 e2) = num e1 + num e2
num (Sub e1 e2) = num e1 - num e2
num (Mul e1 e2) = num e1 * num e2
num (Div e1 e2) = num e1 `div` num e2
它应该计算出任何正规方程,但我如何将 If 布尔数据类型合并到总方程中?
【问题讨论】:
-
只需向
value添加另一个分支来处理If的情况。您是否遇到过任何具体问题?还有,你为什么要复制num和value之间的代码? -
技术上是两段代码。合并
If语句的语法是什么?我的困惑在于实际的语法。我不确定如何添加If。 -
您昨天是否针对您的类似问题实施了@melpomene 的出色answer?如果你已经这样做了,处理
If的情况也应该是微不足道的。 -
他们做得很棒。我的困惑是如何处理
If的情况,我认为必须以不同的方式处理,但我想多了。
标签: haskell