swi prolog 与c#

本文详细介绍了如何将C#与Prolog语言结合使用,包括下载安装SwiProlog库,解决模块加载问题,以及提供一个实际示例代码。通过设置环境变量PATH,成功在C#中调用Prolog实现基本的逻辑查询。

最近,玩了一下prolog语言,感觉还是很有意思。由于我是学c#的,所以就不禁想看看c#如何与prolog进行结合,在网上找了一下,发现有个swi prolog对c#的dll,下载官网:http://www.lesta.de/Prolog/SwiPlCs/Generated/Index.html。记得,请选择最新那个版本SwiPlCs_1.1.60605.0(切身体会,不然你或者会遇到“尝试读取或写入受保护的内存”的错误)。

  首先,我先下载一个32 位的swi prolog,安装好后,打开vs,新建一个控制台程序,然后按照官方给的例子HelloWorldDemo写了一段代码,编译,运行后,发现出现了一个“找不到该模块”的错误,没办法,没头绪只能上网找资料,结果你懂得,百度的资料简直少的令人发指,只能google了。通过阅读一大堆有用没用的英文文档后,发现了应该要添加一句: Environment.SetEnvironmentVariable("PATH", @"D:\swipl\bin");第二个参数是你所安装的swi prolog的bin目录

代码如下:

       static void Main(string[] args)
        {
            Environment.SetEnvironmentVariable("PATH", @"D:\swipl\bin");
            if (!PlEngine.IsInitialized)
            {
                String[] param = { "-q" };  // suppressing informational and banner messages
                PlEngine.Initialize(param);
                PlQuery.PlCall("assert(father(martin, inka))");
                PlQuery.PlCall("assert(father(uwe, gloria))");
                PlQuery.PlCall("assert(father(uwe, melanie))");
                PlQuery.PlCall("assert(father(uwe, ayala))");
                using (PlQuery q = new PlQuery("father(P, C), atomic_list_concat([P,' is_father_of ',C], L)"))
                {
                    foreach (PlQueryVariables v in q.SolutionVariables)
                        Console.WriteLine(v["L"].ToString());

                    Console.WriteLine("all child's from uwe:");
                    q.Variables["P"].Unify("uwe");
                    foreach (PlQueryVariables v in q.SolutionVariables)
                        Console.WriteLine(v["C"].ToString());
                }
                PlEngine.PlCleanup();
                Console.WriteLine("finshed!");
                Console.ReadKey();
            }
        }

  

 当然,结果还是不行的,为什么呢?原来我在安装swi prolog时并没有装完整,还需要设置一个环境变量,

然后重启你的vs,再运行一遍,很好,这个问题解决了。

补充一下:从官网下载来的SwiPlCs_1.1.60605.0里有两个dll,我是用的SwiPlCs.dll。

以上就是我折腾了一个晚上和一个早上的所得,希望对大家有所帮助。

转载于:https://www.cnblogs.com/xinghen/p/5412880.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值