对不起,这是一个初学者问题。我只是想让x = 5,y = 2,并将所有其他变量设置为零。所有这些工作是验证p计算5!在下面的代码中,其中p代表将整数分配给Haskell中的变量
y:= 1;而¬(x = 1)do(y:= y * x; x:= x-1);
type Num = Integer
type Var = String
type Z = Integer
type T = Bool
type State = Var -> Z
data Aexp = N Num | V Var | Add Aexp Aexp | Mult Aexp Aexp | Sub Aexp Aexp deriving (Show, Eq, Read)
data Bexp = TRUE | FALSE | Eq Aexp Aexp | Le Aexp Aexp | Neg Bexp | And Bexp Bexp deriving (Show, Eq, Read)
data Stm = Ass Var Aexp | Skip | Comp Stm Stm | If Bexp Stm Stm | While Bexp Stm deriving (Show, Eq, Read)
p::Stm
p = (Comp(Ass "y" (N 1))(While(Neg(Eq (V "x") (N 1)))(Comp (Ass "y" (Mult (V "y") (V "x")))(Ass "x" (Sub (V "x") (N 1))))))
s :: State {- It has to be Var -> Int-}
s x = 5
s y = 2
而当我尝试编译这个,ghci给出模式匹配是重叠的。我知道这是一个非常简单的问题,但我没有太多的信息可以解决这个问题。你能给我任何提示吗?谢谢!
有什么'Var'类型的定义平等无法进行测试? – Lee
Var是字符串。对不起,我没有说清楚。@ Lee – dajavanoob
不考虑模式匹配问题,你正在执行错误的功能。您需要一个映射到* store *变量/表达式关联,这些关联可以在您的评估者遇到'Ass'语句时更改。您的评估人员将使用它来评估'V'值,方法是将它们替换为存储在地图中的值。 – chepner