昨晩見つけたナニ
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)