Beispiel #1
0
 protected override Expression InternalCall(IEnumerable<Expression> args)
 {
     var list = args.GetAt<ListExpression>(0);
     var result = new ListExpression(list.Elements);
     result.Elements.Reverse();
     return result;
 }
Beispiel #2
0
 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;
 }
Beispiel #3
0
 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;
 }
Beispiel #4
0
        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;
        }
Beispiel #5
0
 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;
 }
Beispiel #6
0
 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;
 }