public override Continuation Evaluate(Continuation c, Datum args) { foreach (var ab in argBodies) { var frameBindings = ab.binding(args); if (frameBindings == null) { continue; } var closureEnv = env.NewFrame(frameBindings); return(c.Evaluate(closureEnv, ab.body)); } throw bindError(args); }
public override Continuation Evaluate(Continuation c, LexicalEnvironment env, Datum args) { var argList = args.ToArray(); if (argList.Length < 1) { throw c.error("Expected at least 1 expression for begin. Got none."); } // Scope any local definitions. var localEnv = env.NewFrame(); var remaining = argList.Reverse().ToArray(); for (var i = 0; i < remaining.Length; ++i) { if (i > 0) { c = c.PushTask(popResult, "Discard result"); } c = c.Evaluate(localEnv, remaining[i]); } return(c); }