def isz_expr_eval(exprs): return Lit(exprs[0].value == 0)
def plus_expr_eval(evalfunc, env, exprs): vals = [evalfunc(exp, env).value for exp in exprs] return Lit(sum(vals))
def mult_expr_eval(evalfunc, env, exprs): vals = [evalfunc(exp, env).value for exp in exprs] return Lit(functools.reduce(lambda x, y: x * y, vals, 1))
def isz_expr_eval(evalfunc, env, exprs): return Lit(evalfunc(exprs[0], env).value == 0)
def div_expr_eval(evalfunc, env, exprs): val1 = evalfunc(exprs[0], env).value val2 = evalfunc(exprs[1], env).value return Lit(val1 / val2)
def plus_expr_eval(exprs): vals = [e.value for e in exprs] return Lit(sum(vals))
def mult_expr_eval(exprs): vals = [e.value for e in exprs] return Lit(functools.reduce(lambda x, y: x * y, vals, 1))
def div_expr_eval(exprs): val1 = exprs[0] val2 = exprs[1] return Lit(val1.value / val2.value)
def valueOfIsZero(self, iszero, env): return Lit(self.valueOf(iszero.expr, env).value == 0)
def test_if(): runtest(*(cases.letlang["if"]), x = Lit(33), y = Lit(22))
def test_diff(): runtest(*(cases.letlang["diff"]), i = Lit(1), v = Lit(5), x = Lit(10))
def test_var(): runtest(*(cases.letlang["var"]), x = Lit(5))