到目前为止,我可以通过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();
请忽略任何缩进错误。提前谢谢。