Beispiel #1
0
        public override Continuation Evaluate(Continuation c, LexicalEnvironment env, Datum args)
        {
            var argList = args.ToArray();

            if (argList.Length != 2)
            {
                throw c.error("Expected 2 arguments: (set! <symbol> <expression>). Got {0} instead", argList.Length);
            }
            var name       = argList[0].CastSymbol();
            var expression = argList[1];

            c = c.PushTask(s =>
            {
                env.Set(name, s.Result);
                return(s);
            }, "set! '{0}'", name);
            return(c.Evaluate(env, expression));
        }