public Lambda(Expression expr, Environment environment) : base("anonymous", environment.CurrentScope) { _environment = environment; _formalParameters = new FormalParameters(expr.Elements.Second()); Precondition = args => args.Count() == _formalParameters.Count; Implementation = args => expr.Elements.Skip(2).Evaluate(_environment.CurrentScope); }
public Macro( string symbol, ListExpression formalParams, IEnumerable<Expression> body, Environment environment) : base(new Token(Tokens.MACRO, symbol)) { _formalParams = new FormalParameters(formalParams); _body = body; _environment = environment; _scope = _environment.CurrentScope; }