def test_kleene1(self): f, item, kleene = Var('f'), Var('item'), Var('kleene') fun = macro(((item,), letr([(f,macro(((), eval_(item), f()), ((), nullword)))], f()))) eq_(eval(let([(kleene,fun)], set_text('aa'), kleene(char('a')))), True)
def test_kleene1(self): f, item, kleene = Var('f'), Var('item'), Var('kleene') fun = macro(((item, ), letr([(f, macro(((), eval_(item), f()), ((), nullword)))], f()))) eq_(eval(let([(kleene, fun)], set_text('aa'), kleene(char('a')))), True)
def make_expression(text): code = begin( sexpression_defines, classic_defines, set_text(text), from_(classic, program)(exp), eoi, eval_(pycall(cons2tuple, exp))) return to_sexpression(code)
def testeval2(self): eq_(eval(let([(x,1)], eval_(quote(x)))), 1)
def testeval1(self): eq_(eval(eval_(quote(1))), (1)) eq_(eval(eval_(quote(add(1, 1)))), (2))
def test_closure1(self): eq_(eval(let([(f, macro([[x], prin(eval_(x))])), (x, 1)], f(x+x))), None)
def test_eval(self): eq_(eval(macro([[x, y], eval_(x)], [[x, y],eval_(y)])(prin(1), prin(2))), None)
([exp_list], and_p(char('['), spaces0(_), from_sexp(sexpression_list)(exp_list), spaces0(_), char(']'))))), define(punct_expression, function( ([L(quote, exp)], and_p(char("'"), from_sexp(sexpression)(exp))), ([L(quasiquote, exp)], and_p(char("`"), from_sexp(sexpression)(exp))), ([L(unquote_splice, exp)], and_p(literal(",@"), from_sexp(sexpression)(exp))), ([L(unquote, exp)], and_p(char(","), from_sexp(sexpression)(exp))))), define(sexpression_list, function( ([Cons(exp, exp_list)], and_p(from_sexp(sexpression)(exp), from_sexp(maybe_spaces)(), from_sexp(sexpression_list)(exp_list))), ([nil], null))), define(sexpression1, function( ([exp], and_p(spaces0(_), from_sexp(sexpression_list)(exp), spaces0(_))))), define(maybe_spaces, function( ([], or_p(if_p(and_p(not_lead_chars('([])'), not_follow_chars('([])'), not_p(eoi)), spaces(_)), spaces0(_) ) ) ) ), define(sexpression, function( # dynamic grammar arises! ([result], and_p(char('{'), from_sexp(sexpression)(exp2), char('}'), setvalue(result, eval_(pycall(cons2tuple, exp2))))), ([exp], from_sexp(atom)(exp)), ([exp], from_sexp(bracket_expression)(exp)), ([exp], from_sexp(punct_expression)(exp))), ), )