Ejemplo n.º 1
0
        public SwiPrologEngine(SwiPrologInitializationSettings settings)
        {
            if (settings == null)
            {
                throw new ArgumentNullException(nameof(settings));
            }

            if (libswipl.PL_is_initialised(IntPtr.Zero, IntPtr.Zero) == 0)
            {
                bool isWindows = RuntimeInformation.IsOSPlatform(OSPlatform.Windows);
                if (!isWindows)
                {
                    throw new Exception("This project presently is built for 64-bit Windows.");
                }

                bool is64bit = Environment.Is64BitOperatingSystem && Environment.Is64BitProcess;
                if (!is64bit)
                {
                    throw new Exception("This project presently is built for 64-bit Windows.");
                }

                if (!Directory.Exists(settings.HomeDirectory))
                {
                    throw new Exception("The specified home directory for SWI Prolog does not exist.");
                }

                if (settings.SetHomeDirectoryEnvironmentVariable)
                {
                    Environment.SetEnvironmentVariable("SWI_HOME_DIR", settings.HomeDirectory);
                }

                if (settings.PrependBinaryDirectoryToPath)
                {
                    Environment.SetEnvironmentVariable("Path", settings.BinaryDirectory + Path.PathSeparator + "%Path%");
                }

                libswipl.LoadLibPl();

                string[] parameters = settings.GenerateParameters();

                var localArgv = new string[parameters.Length + 1];
                int idx       = 0;
                localArgv[idx++] = "";
                foreach (var s in parameters)
                {
                    localArgv[idx++] = s;
                }

                if (libswipl.PL_initialise(localArgv.Length, localArgv) == 0)
                {
                    throw new Exception("SWI Prolog failed to initialize.");
                }
            }
            else
            {
                throw new Exception("SWI Prolog is already initialized.");
            }

            modules = new List <SwiPrologModule>();
        }
Ejemplo n.º 2
0
        public static void Main(string[] args)
        {
            var swi_settings = new SwiPrologInitializationSettings
            {
                HomeDirectory = @"C:\Program Files\swipl",
                SetHomeDirectoryEnvironmentVariable = true,
                BinaryDirectory = @"C:\Program Files\swipl\bin",
                PrependBinaryDirectoryToPath = true
            };

            var xsb_settings = new XsbPrologInitializationSettings
            {
                HomeDirectory   = @"C:\Program Files (x86)\XSB",
                BinaryDirectory = @"C:\Program Files (x86)\XSB\config\x64-pc-windows\bin",
                PrependBinaryDirectoryToPath = true
            };

            using (var engine = new V8ScriptEngine())
            {
                engine.AddHostType("Console", typeof(Console));

                if (Directory.Exists(swi_settings.HomeDirectory))
                {
                    using (var swi = new SwiPrologEngine(swi_settings))
                    {
                        Console.WriteLine("SWI Prolog " + swi.Version);

                        engine.AddHostObject("swi", swi);

                        string script1 = File.OpenText("script1.js").ReadToEnd();

                        engine.Execute(script1);

                        Console.WriteLine();
                    }
                }

                if (Directory.Exists(xsb_settings.HomeDirectory))
                {
                    using (var xsb = new XsbPrologEngine(xsb_settings))
                    {
                        Console.WriteLine("XSB Prolog " + xsb.Version);

                        engine.AddHostObject("xsb", xsb);

                        string script2 = File.OpenText("script2.js").ReadToEnd();

                        engine.Execute(script2);

                        Console.WriteLine();
                    }
                }
            }
        }
Ejemplo n.º 3
0
        public static void Initialize(TestContext context)
        {
            var settings = new SwiPrologInitializationSettings
            {
                HomeDirectory = @"C:\Program Files\swipl",
                SetHomeDirectoryEnvironmentVariable = true,
                BinaryDirectory = @"C:\Program Files\swipl\bin",
                PrependBinaryDirectoryToPath = true
            };

            v8     = new V8ScriptEngine();
            prolog = new SwiPrologEngine(settings);
            v8.AddHostType("Console", typeof(Console));
            v8.AddHostObject("prolog", prolog);
        }