def test_lambda_arguments_are_lists(): """The parameters of a `lambda` should be a list.""" closure = evaluate(parse("(lambda (x y) (+ x y))"), Environment()) assert_true(is_list(closure.params)) with assert_raises(LispError): evaluate(parse("(lambda not-a-list (body of fn))"), Environment())
def unparse(ast): """Turns an AST back into lisp program source""" if is_boolean(ast): return "#t" if ast else "#f" elif is_list(ast): if len(ast) > 0 and ast[0] == "quote": return "'%s" % unparse(ast[1]) else: return "(%s)" % " ".join([unparse(x) for x in ast]) else: # integers or symbols (or lambdas) return str(ast)