Exemplo n.º 1
0
        public override IContext Reduce(IContext ctx)
        {
            var tail = BuiltIn.Tail(Cdr);

            if (tail == ClCell.Nil || BuiltIn.Cdr(tail) != ClCell.Nil)
            {
                throw new SyntaxError("Invalid body of the let special form");
            }
            var beginBody = VariableDefinitionExpressions().Append(BuiltIn.Car(tail)).ListOf();
            var begin     = new ClCell(ClSymbol.Begin, beginBody);
            var lambda    = BuiltIn.ListOf(ClSymbol.Lambda, ClCell.Nil, begin);

            return(BuiltIn.ListOf(lambda).Reduce(ctx));
        }