protected override Expression InternalCall(IEnumerable<Expression> args) { var list = args.GetAt<ListExpression>(0); var result = new ListExpression(list.Elements); result.Elements.Reverse(); return result; }
private IEnumerable<Expression> PrependSeedToList(IEnumerable<Expression> arguments) { var list = arguments.GetAt<ListExpression>(1); var copy = new ListExpression(list.Elements); copy.Elements.Insert(0, arguments.First()); yield return copy; }
protected override Expression InternalCall(IEnumerable<Expression> args) { var f = (Function)args.First(); var list = args.GetAt<ListExpression>(1); var result = new ListExpression(list.Elements.OrderBy(expr => f.Call(expr).Value)); return result; }
public FormalParameters(Expression expr) { if (!(expr is ListExpression)) throw new MistException("Formal parameters must be a list, not " + expr); if (!expr.Elements.All(p => p.Token.Type == Tokens.SYMBOL)) throw new MistException("Only symbols allowed in formal paremeters. " + expr); _parameters = (ListExpression)expr; }
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; }
protected override Expression InternalCall(IEnumerable<Expression> args) { var list = args.GetAt<ListExpression>(0); var result = new ListExpression(list.Elements.OrderBy(expr => expr.Value)); return result; }