def get_variable(self, name): """ Get a variable in the kernel's enviroment. """ # search through the local env, if one reg_env = scheme.GLOBALS["env_reg"] if reg_env: def get_index(item, ls): pos = 0 while ls != scheme.Symbol("()"): if item == ls.car: return pos ls = ls.cdr return None symbol_name = scheme.Symbol(name) # car 'environment # cadr frame: (vector of vars, names) current_frame = reg_env = reg_env.cdr while current_frame != scheme.Symbol("()"): if not hasattr(current_frame, "car"): break values = current_frame.car.car # vector of bindings (val . docstring) names = current_frame.car.cdr.car # list if symbol_name in names: index = get_index(symbol_name, names) return values[index].car current_frame = current_frame.cdr # if not found, search through ENVIRONMENT: if name in scheme.ENVIRONMENT: return scheme.ENVIRONMENT[name]
def get_index(item, ls): pos = 0 while ls != scheme.Symbol("()"): if item == ls.car: return pos ls = ls.cdr return None