评估支持一个变量的小型数学类型语言

Alg*_*fic 6 evaluation parsing haskell

我编写了读取字符串输入的解析器.这样可行.我还写了一个评估员,它会吐出结果.但是有一个小细节,我在实施时遇到了麻烦.请看以下示例:

+(sw+(2,2),sr)
Run Code Online (Sandbox Code Playgroud)

这种小语言的sw结构假设要评估"+(2,2)"并将其存储在某处.sr结构将读取此存储区域.整个表达式将评估为8.

我对它的想法是为函数eval使用一个额外的参数来存储结果.但是,我看不出这种情况.注意我是haskell的新手,所以请善待.哦,这是功课.所以不要给我一个解决方案,给我一个提示.

sdc*_*vvc 5

由于表达式可以读写存储区,因此评估函数应将内存状态作为参数,并在结果中返回新状态.

 evaluate :: Expr -> Int -> (Float, Int)
Run Code Online (Sandbox Code Playgroud)

[ Int存储的类型在哪里,Float是结果的类型,当然你可以改变它].

实现时evaluate (Sum a b),需要将内存传递给内存evaluate a,获取新的内存值并将其赋予evaluate b.

     |
     |  m
    \ /
|----------|   x
|evaluate a|--------|
|-----------        |
     |              |
     |  m'          |
    \ /            \ /
|----------|  y    ---
|evaluate b|----->| + |
|----------|       ---
     |              |
     |              |
    \ /            \ /
   final           final
   value of        result
   memory
Run Code Online (Sandbox Code Playgroud)

使用模式匹配.你开始吧let (x,m') = evaluate a m in ....