def execute_proc(arguments, fail0): body_env = extend_environment(names, arguments, procedure_environment(procedure)) if TRACE_APPLICATIONS: display(cons(procedure_name(procedure), arguments)) display(body_env) print() return continue_with( body_exec, body_env, succeed, fail0, )
INITIAL_ENV_BINDINGS = { symbol("foo"): lambda: 42, symbol("null?"): is_null, symbol("pair?"): is_pair, symbol("cons"): cons, symbol("car"): car, symbol("cdr"): cdr, symbol("length"): length, symbol("+"): lambda *args: sum(args), symbol("-"): lambda a, b: a - b, symbol("*"): lambda a, b: a * b, symbol("/"): lambda a, b: a / b, symbol("%"): lambda a, b: a % b, symbol("="): lambda a, b: a == b, symbol("<"): lambda a, b: a < b, symbol(">"): lambda a, b: a > b, symbol("<="): lambda a, b: a <= b, symbol(">="): lambda a, b: a >= b, symbol("#t"): True, symbol("#f"): False, symbol("eq?"): lambda a, b: a is b, symbol("not"): lambda b: not b, symbol("error"): error, symbol("global-hash-set!"): global_hash_set, symbol("global-hash-get"): global_hash_get, symbol("display"): lambda *args: display(*args), symbol("newline"): lambda: print(), symbol("list"): lambda *args: args, symbol("the-unspecified-value"): type("_", (), {}), }
match_args(is_lazy, is_executor, is_environment), lambda parameter, operand_exec, environment: postpone( operand_exec, environment), ) define_generic_procedure_handler( x.handle_operand, match_args(is_lazy_memo, is_executor, is_environment), lambda parameter, operand_exec, environment: postpone_memo( operand_exec, environment), ) define_generic_procedure_handler( x.advance, match_args(is_postponed), lambda object: x.advance(object.expression(object.environment)), ) define_generic_procedure_handler( x.advance, match_args(is_postponed_memo), lambda object: object.set_value( x.advance(object.expression(object.environment))), ) define_generic_procedure_handler(x.advance, match_args(is_advanced_memo), advanced_value) if __name__ == "__main__": while True: print("> ", end="") display(eval_str(None)) print()
def repl(): check_repl_initialized() while True: print("> ", end="") display(eval_str(None)) print()
def success_k(value, fail): print(f";;; {time() - timer} seconds elapsed") display(value) print() return continue_with(internal_loop, success_k, fail)
def execute_proc(args, fail0): if TRACE_APPLICATIONS: display(cons(symbol("<primitive>"), args)) print() return continue_with(succeed, apply_primitive_procedure(procedure, args), fail0)
def execute_proc(args, fail0): if TRACE_APPLICATIONS: display(cons(symbol("<continuation>"), args)) print() return continue_with(continuation.succeed, *args, continuation.fail)