Parsing 对支持一个变量的小型数学类型语言的求值

Parsing 对支持一个变量的小型数学类型语言的求值,parsing,haskell,evaluation,Parsing,Haskell,Evaluation,我已经编写了读取字符串输入的解析器。这很有效。我还写了一个评价者,他会给出结果。但有一个小细节我在实施上遇到了困难。请看以下示例: +(sw+(2,2),sr) 这个小型语言的sw结构被假定为计算“+(2,2)”并将其存储在某个地方。sr构造将读取此存储区域。整个表达式的计算结果为8 我的想法是为函数eval使用一个额外的参数,用于存储结果。但我看不出有什么效果。注意我是哈斯克尔的新手,所以要友善。哦,这是家庭作业。所以不要给我一个解决方案,给我一个提示。因为表达式可以读写到存储区域,所以求值

我已经编写了读取字符串输入的解析器。这很有效。我还写了一个评价者,他会给出结果。但有一个小细节我在实施上遇到了困难。请看以下示例:

+(sw+(2,2),sr)
这个小型语言的sw结构被假定为计算“+(2,2)”并将其存储在某个地方。sr构造将读取此存储区域。整个表达式的计算结果为8


我的想法是为函数eval使用一个额外的参数,用于存储结果。但我看不出有什么效果。注意我是哈斯克尔的新手,所以要友善。哦,这是家庭作业。所以不要给我一个解决方案,给我一个提示。

因为表达式可以读写到存储区域,所以求值函数应该获取内存状态作为参数,并在结果中返回新状态

 evaluate :: Expr -> Int -> (Float, Int)
[其中,
Int
是存储类型,
Float
是结果类型,当然您可以更改它]

在实现
求值(求和AB)
时,需要将内存传递到
求值a
,获取内存的新值,并将其交给
求值b

     |
     |  m
    \ /
|----------|   x
|evaluate a|--------|
|-----------        |
     |              |
     |  m'          |
    \ /            \ /
|----------|  y    ---
|evaluate b|----->| + |
|----------|       ---
     |              |
     |              |
    \ /            \ /
   final           final
   value of        result
   memory

使用模式匹配。您可以从
让(x,m')=在…
中计算m开始,谢谢!我没有用“让”这个词。但我成功了。