嗨我需要计算类型的帮助。整个程序假设要一个字符串,解析它,最后计算一个值。我开始的字符串可以是这样的:“let X = + 1 2 in * X 2 - X
”。当我解析它时,我会得到这个:“Let (Vari X) (Sum (Lit 1) (Lit 2)) (Mul (Vari X) (Lit 2)))
”。此时,我可以解析像这样的“* + 2 3 * 2 + 6 - 2”和之前的表达式。但我无法计算出前面的表达式,“let X = + 1 2 in * X 2 - X
”。如果有人能指引我朝着正确的方向发展,我会很高兴,因为现在,我真的不知道我会如何做这项工作。由于Haskell - 计算字符串“让X = 3 in + X X”
代码:
data Chara = A | B | C | D | E | F | G | H | I | J | K | L | M | N | O | P | Q | R | S | T | U | V | W | X | Y | Z deriving (Eq, Show)
data Number = Single Int | Many Int Number deriving (Eq, Show)
data Expr = Lit Int | Sub Expr | Sum Expr Expr | Mul Expr Expr | Vari Chara | Let Expr Expr Expr
deriving Show
--Want to calculate this
--Let (Vari X) (Sum (Lit 1) (Lit 2)) (Mul (Vari X) (Lit 2)))
calculate :: Expr -> Int
calculate (Sub a) = let e = calculate a in (-e)
calculate (Sum a b) = let e = calculate a
r = calculate b
in (e+r)
calculate (Mul a b) = let e = calculate a
r = calculate b
in (e*r)
calculate (Lit a) = a
你肯定应该'让Expr的Expr的Expr'而不是'让甜心Expr的Expr'? (并不是说这是完全不合理的,但它有点棘手,可能不值得在教育方面)。 – leftaroundabout
是否[你们](https://stackoverflow.com/questions/46584907/haskell-parsing-input-functions)获得同一班级的作业? –
我正在做一项任务。不知道其他人。 – iIllumination