【发布时间】:2013-02-06 08:31:00
【问题描述】:
我正在尝试编写一个接受任何通用语句的程序, 评估它,并在评估时显示每个步骤。
例如, 如果我们有一系列赋值语句,它应该运行为:
评估赋值语句 1
显示评估结果1
评估赋值语句 2
显示评估结果2
现在,它只显示最终结果。 代码是
> evalS_maybe :: Statement -> Store -> Maybe Store
> evalS_maybe w@(While e s1) s = evalS_maybe (If e
> (Sequence s1 (While e s1))
> Skip)
> s
> evalS_maybe Skip s = Just s
> evalS_maybe (Sequence s1 s2) s = do
> sq <-evalS_maybe s1 s
> evalS_maybe s2 sq
> evalS_maybe (Assign x e ) s = do
> ag <-evalE_maybe e s
> return ( Map.insert x ag s )
> evalS_maybe (If e s1 s2) s = do
> b2 <- evalE_maybe e s
> case b2 of
> BoolVal True -> evalS_maybe s1 s
> BoolVal False -> evalS_maybe s2 s
> _ -> return s
编辑:
其余用到的数据类型有:
> type Variable = String
> data Statement =
> Assign Variable Expression
> | If Expression Statement Statement
> | While Expression Statement
> | Sequence Statement Statement
> | Skip
> deriving (Show)
> data Expression =
> Var Variable
> | Val Value
> | Op Bop Expression Expression
> deriving (Show)
> data Bop =
> Plus
> | Minus
> | Times
> | Divide
> | Gt
> | Ge
> | Lt
> | Le
> deriving (Show)
> data Value =
> IntVal Int
> | BoolVal Bool
> deriving (Show)
> type Store = Map Variable Value
有人可以帮忙吗? 提前致谢!
【问题讨论】:
-
您需要向我们展示
Statement和Store的数据定义,然后我们才能为您提供任何有用的帮助。 -
@ChrisTaylor,我尝试通过编辑问题来添加相同的内容。你能帮忙吗?谢谢。
-
您面临的具体问题是什么?为什么你不能做到这一点?现在,这个问题听起来像是“我的程序没有做的事情。你能帮我完成它吗?”这对 StackOverflow 来说不是一个好问题。你可以说得更详细点吗?你试过什么?
-
我已经回答了基本相同的问题here;适应您的需求应该不难。
标签: haskell expression-evaluation