C#Swi-Prolog:如何在C#中查询外部prolog文件?

时间:2016-03-01 20:32:08

标签: c# prolog ffi swi-prolog

到目前为止,我可以通过prolog网站上提供的示例代码与prolog进行通信。 但是当我试图从我的prolog文件中提取结果时,它没有得到文件并且没有任何错误就结束了。 我测试的示例代码如下:

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.ReadLine();
}

我试图使用的代码是,我的prolog文件“OT.pl”放在swi-prolog文件夹中:

 String[] param = { "-q", "-f", @"OT.pl" };

        if (!PlEngine.IsInitialized)
        {
            try
            {
                PlEngine.Initialize(param);
                PlQuery carrega = new PlQuery("carrega('OT.bd')");
                carrega.NextSolution();
                PlQuery listQuery= new PlQuery("list(X)");
                foreach (PlQueryVariables v in listQuery.SolutionVariables)
                    listBox1.Items.Add(v["X"].ToString());

            }
            catch (System.Exception ex)
            {
                Console.WriteLine("Failure: " + ex.Message);
                // return;
            }
        }
        Console.WriteLine("Finished!");
        Console.ReadLine();

请忽略任何缩进错误。提前谢谢。

0 个答案:

没有答案