public Func(Value ast, Environment env, Types.Expression fparams, Func <Types.Expression, Value> fn) { this.fn = fn; this.ast = ast; this.env = env; this.fparams = fparams; }
public Environment(Environment outer, Types.Expression binds, Types.Expression exprs) { _outer = outer; for (var i = 0; i < binds.Size(); i++) { var sym = ((Types.Symbol)binds.Nth(i)).GetName(); if (sym == "ampersand") { _data[((Types.Symbol)binds.Nth(i + 1)).GetName()] = exprs.Slice(i); break; } else { _data[sym] = exprs.Nth(i); } } }
public Environment GetEnv(Types.Expression args) => new Environment(env, fparams, args);
public Value Apply(Types.Expression args) => fn(args);