目前在贾瓦撰写的LISP译员上工作。 现在,我坐在关闭时。 我希望能够结束这样的局面:
(define a 1000)
(define closure (lambda (a) (lambda (b) (+ a b))))
(define x (closure 10))
(x 20) --> 30
因此,(x 20)
>应当交回30
。 但是,我猜想的是,1020名口译人员返回。 我认为,这一错误属于我的伊斯兰堡垒。 它希望:
public class LLambda extends LOperation {
private LList parameters;
private LList definitions;
public LLambda(LList parameters, LList definitions) {
this.parameters = parameters;
this.definitions = definitions;
}
public LObject eval(Environment environment, LObject tokens) {
environment = environment.copy();
for(int i = 0; i < parameters.size(); i++) {
LSymbol key = LSymbol.create(parameters.get(i));
LObject object = ((LList) tokens).get(i);
object = object.eval(environment, tokens);
environment.put(key, object);
}
return definitions.eval(environment, tokens);
}
}
这一班级的工作是罚款的,但它没有储存环境价值,以便能够关闭。 是否有人的想法? 以及在哪里这样做? 在构造或电子阀法中?
而且,如果我不执行:
environment = environment.copy();
关闭是行之有效的,但中断了其他一些试验。
感谢。
(我也可以上载整个源头,或在GIT中免费提供。)