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);
        }
Beispiel #2
0
 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);
 }
Beispiel #3
0
 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);
 }
Beispiel #4
0
 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);
 }
Beispiel #5
0
 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);
 }
Beispiel #6
0
        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 }
            });
        }
Beispiel #7
0
 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);
            }));
        }
Beispiel #9
0
        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());
        }
Beispiel #10
0
 public static Object Type(Object[] args)
 {
     return(Curry.MinOne(StandardOperators.Type, args) ?? args[0].ToType());
 }
Beispiel #11
0
 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()));
 }
Beispiel #12
0
 public static Object Transpose(Object[] args)
 {
     return(Curry.MinOne(StandardOperators.Transpose, args) ??
            If.Is <Double[, ]>(args, x => x.Transpose()) ??
            args[0].ToNumber().ToMatrix());
 }