В рамках определения интерпретатора языка у меня есть следующее определение:Haskell: определить интерпретатор для языка
initCtx :: Context
initCtx = (Map.empty, initEnv)
where initEnv =
Map.fromList [ ...
, ("+", undefined)
...
]
И для операции сумма у меня есть это:
evalExpr :: Expr -> Interpreter Value
evalExpr (e1 :+: e2) = do v1 <- eval e1
v2 <- eval e2
return Interpreter $ (v1 + v2)
exalExpr производится мне, но что мне нужно записать вместо undefined
, чтобы выражение выполнялось? Или, может быть, я искал не то? Конечно, у меня больше операций, но мне просто нужно иметь пример. Я новичок в Haskell, мне практически необходимо иметь дело с этим.
Спасибо!
EDIT:
type Env = Map Ident Value
type Primitive = [Value] -> Interpreter Value
type PEnv = Map FunName Primitive
type Context = (Env, PEnv)
Вот Expr
:
data Expr = Number Int
| String String
| Array [Expr]
| Undefined
| TrueConst
| FalseConst
| Var Ident
| Compr ArrayFor Expr
| Call FunName [Expr]
| Assign Ident Expr
| Comma Expr Expr
deriving (Eq, Read, Show)
И Interpreter
newtype Interpreter a = Interpreter {runInterpreter :: Context -> Either Error (a, Env)}
И Значение:
data Value = IntVal Int
| UndefinedVal
| TrueVal | FalseVal
| StringVal String
| ArrayVal [Value]
deriving (Eq, Show)
Это упражнение, где вы получили A, B, C и сказали идти реализовать X , Y, Z? Или вы сами разрабатываете все это? – MathematicalOrchid
@MathematicsOrchid это упражнение, да – Comforse
Можете ли вы рассказать нам конкретно, какие биты вам даны и что они должны означать? (Например, «Контекст» - это пара карт, но что означает эти карты, которые должны означать *? Где: ': +:' из?? – MathematicalOrchid