昨晩見つけたナニ

cal/cc 実装版もあるようですが、とりあえず簡易版から見ています。

環境作って云々な事もしてます。python には lambda な命令があるので以下な事ができたりする模様。

    elif x[0] == 'lambda':         # (lambda (var*) exp)
        (_, vars, exp) = x
        return lambda *args: eval(exp, Env(vars, args, env))

Env なソレもなかなか面白くて定義が以下。

class Env(dict):
    "An environment: a dict of {'var':val} pairs, with an outer Env."
    def __init__(self, parms=(), args=(), outer=None):
        self.update(zip(parms,args))
        self.outer = outer
    def find(self, var):
        "Find the innermost Env where var appears."
        return self if var in self else self.outer.find(var)

lambda なソレだと環境を extend する形で大域を作る時のナニは以下。

global_env = add_globals(Env())

で、apply な部分が以下になります。python ヤるなぁ。

    else:                          # (proc exp*)
        exps = [eval(exp, env) for exp in x]
        proc = exps.pop(0)
        return proc(*exps)