Exemplo n.º 1
0
    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]
Exemplo n.º 2
0
 def get_index(item, ls):
     pos = 0
     while ls != scheme.Symbol("()"):
         if item == ls.car:
             return pos
         ls = ls.cdr
     return None