public static PipeValue Let(PipeContext context) { while (context.HasArgument()) { string name = (string)context.TakeArgument(); PipeLambda fn = context.TakeFunction(); if (fn != null) { context.Globals[name] = fn.Invoke(context.Value); } else { context.Globals[name] = context.TakeArgument(); } } return(PipeValue.Undefined); }
public static PipeValue Sum(PipeContext context) { PipeValue result = PipeValue.Undefined; PipeLambda fn = context.TakeFunction(); if (fn == null) { result = context.TakeArgument(); fn = context.TakeFunction(); } if (fn == null) { if (context.HasArgument()) { fn = context.TakeArgumentAsKeyFunction(); } else { fn = new PipeLambda((obj, i) => obj); } } PipeValuePropertyEnumerator enumerator = context.Value.GetEnumerator(); while (enumerator.MoveNext()) { if (result != PipeValue.Undefined) { result = result + fn.Invoke(enumerator); } else { result = fn.Invoke(enumerator); } } return(result); }