private static Function Wrap(Func <String, String> transformer) { var function = default(Function); function = args => Curry.MinOne(function, args) ?? If.Is <String>(args, transformer); return(function); }
public static Object Not(Object[] args) { return(Curry.MinOne(StandardOperators.Not, args) ?? If.Is <Double[, ]>(args, x => x.AreEqual(0.0)) ?? If.Is <Object>(args, x => !x.ToBoolean()) ?? true); }
public static Object Factorial(Object[] args) { return(Curry.MinOne(StandardOperators.Factorial, args) ?? If.Is <Double[, ]>(args, x => x.ForEach(y => y.Factorial())) ?? If.Is <Object>(args, x => x.ToNumber().Factorial()) ?? Double.NaN); }
public static Object Negative(Object[] args) { return(Curry.MinOne(StandardOperators.Negative, args) ?? If.Is <Double[, ]>(args, x => x.ForEach(y => - y)) ?? If.Is <Object>(args, x => - x.ToNumber()) ?? Double.NaN); }
public static Object Positive(Object[] args) { return(Curry.MinOne(StandardOperators.Positive, args) ?? If.Is <Double[, ]>(args, x => x) ?? If.Is <Object>(args, x => x.ToNumber()) ?? Double.NaN); }
public static void Integrate(Engine engine, IInteractivity interactivity) { var console = new ConsoleFunctions(interactivity); var help = new HelpFunctions(engine.Globals, engine.Scope); engine.SetFunction("spawn", new Function(args => { var id = engine.Globals["spawn"] as Function; return(Curry.MinOne(id, args) ?? If.Is <Function>(args, f => Helpers.Spawn(f, args.Skip(1).ToArray()))); })); engine.SetFunction("sleep", new Function(args => { var id = engine.Globals["sleep"] as Function; return(Curry.MinOne(id, args) ?? If.Is <Double>(args, time => Helpers.Sleep(time))); })); engine.SetFunction("il", new Function(args => { var id = engine.Globals["il"] as Function; return(Curry.MinOne(id, args) ?? If.Is <String>(args, source => Helpers.ShowIl(engine, source))); })); engine.SetFunction("ast", new Function(args => { var id = engine.Globals["ast"] as Function; return(Curry.MinOne(id, args) ?? If.Is <String>(args, source => Helpers.ShowAst(engine, source))); })); engine.SetFunction("tokens", new Function(args => { var id = engine.Globals["tokens"] as Function; return(Curry.MinOne(id, args) ?? If.Is <String>(args, source => Helpers.ShowTokens(engine, source))); })); engine.SetConstant("process", new ProcessObject()); engine.SetConstant("measure", new Function(args => { var id = engine.Globals["measure"] as Function; return(Curry.MinOne(id, args) ?? If.Is <Function>(args, f => Helpers.Measure(f))); })); engine.SetFunction("help", new Function(args => { return(args.Length == 0 ? help.GetAllTopics() : If.Is <String>(args, topic => help.GetTopic(topic))); })); engine.SetFunction("exit", new Function(args => { Environment.Exit(0); return(null); })); engine.SetConstant("console", new Dictionary <String, Object> { { "read", console.Read }, { "write", console.Write }, { "writeln", console.WriteLine } }); }
public ConsoleFunctions(IInteractivity interactivity) { _interactivity = interactivity; Read = new Function(args => { return(PerformRead()); }); Write = new Function(args => { return(Curry.MinOne(Write, args) ?? PerformWrite(args[0])); }); WriteLine = new Function(args => { return(PerformWriteLine(args.Length == 0 ? String.Empty : args[0])); }); }
public static void AllowModules(this Engine engine, IEnumerable <IModuleFileReader> readers, IEngineCreator creator) { var importer = new ModuleImporter(readers, creator); engine.SetFunction("import", new Function(args => { var id = engine.Globals["import"] as Function; var directory = engine.GetDirectory(); return(Curry.MinOne(id, args) ?? If.Is <String>(args, fileName => importer.From(fileName, directory))); })); engine.SetFunction("export", new Function(args => { var value = args.Length != 0 ? args[0] : null; Cache.Assign(engine, value); return(null); })); }
public static void Integrate(Engine engine) { engine.SetFunction("spawn", new Function(args => { var id = engine.Globals["spawn"] as Function; return(Curry.MinOne(id, args) ?? If.Is <Function>(args, f => Helpers.Spawn(f, args.Skip(1).ToArray()))); })); engine.SetFunction("il", new Function(args => { var id = engine.Globals["il"] as Function; return(Curry.MinOne(id, args) ?? If.Is <String>(args, source => Helpers.ShowIl(engine, source))); })); engine.SetFunction("ast", new Function(args => { var id = engine.Globals["ast"] as Function; return(Curry.MinOne(id, args) ?? If.Is <String>(args, source => Helpers.ShowAst(engine, source))); })); engine.SetConstant("process", new ProcessObject()); engine.SetFunction("help", new Function(args => { if (args.Length == 0) { return(Helpers.GetAllTopics(engine.Globals)); } return(null); })); engine.SetFunction("import", new Function(args => { var id = engine.Globals["import"] as Function; return(Curry.MinOne(id, args) ?? If.Is <String>(args, fileName => Helpers.Import(fileName))); })); engine.SetFunction("export", new Function(args => { Helpers.Export(engine, args.Length != 0 ? args[0] : null); return(null); })); engine.SetConstant("repl", new ReplObject()); }
public static Object Type(Object[] args) { return(Curry.MinOne(StandardOperators.Type, args) ?? args[0].ToType()); }
public static Object Abs(Object[] args) { return(Curry.MinOne(StandardOperators.Abs, args) ?? If.Is <Double[, ]>(args, x => Matrix.Abs(x)) ?? Math.Abs(args[0].ToNumber())); }
public static Object Transpose(Object[] args) { return(Curry.MinOne(StandardOperators.Transpose, args) ?? If.Is <Double[, ]>(args, x => x.Transpose()) ?? args[0].ToNumber().ToMatrix()); }