嗨我需要計算類型的幫助。整個程序假設要一個字符串,解析它,最後計算一個值。我開始的字符串可以是這樣的:「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