我是Prolog和C#的新手。当我尝试将Prolog与C#集成时,我发现了一些错误,
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using SbsSW.SwiPlCs;
namespace ConsoleApplication2
{
class Program
{
static void Main(string[] args)
{
// Environment.SetEnvironmentVariable("SWI_HOME_DIR", @"the_PATH_to_boot32.prc"); // or boot64.prc
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 (var 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 children from uwe:");
q.Variables["P"].Unify("uwe");
foreach (PlQueryVariables v in q.SolutionVariables)
Console.WriteLine(v["C"].ToString());
}
PlEngine.PlCleanup();
Console.WriteLine("finished!");
}
}
}
}
它没有运行,在运行之前我添加了参考SwiPlCs.dll。但它显示错误“FileNotFoundException未处理,找不到指定的模块。(HRESULT异常:0x8007007E)”。
那么有人可以帮我解决这个错误吗?
我得到了这个编码here
答案 0 :(得分:4)
您提供的链接完整说明了此错误:
如果找不到
libswipl.dll
或其中一个依赖项,您将收到类似的错误System.IO.FileNotFoundException
:Das angegebene Modul wurde nicht gefunden。 (Ausnahme von HRESULT:0x8007007E)另一个常见错误是:
SWI-Prolog: [FATAL ERROR: Could not find system resources]` Failed to release stacks
要解决此问题,请按照SWI-Prolog FAQ FindResources中的说明添加
SWI_HOME_DIR
环境变量,并在此类状态下调用PlEngine.Initialize
。Environment.SetEnvironmentVariable("SWI_HOME_DIR", @"the_PATH_to_boot32.prc");
默认情况下,此代码已注释,取消注释并提供the_PATH_to_boot32.prc
的正确路径。如FAQ:
解决方案
在Windows上,只需将
libswipl.dll
保留在安装树中(,不要将其复制到别处),然后将安装树的bin目录添加到%PATH%
跨平台且强大的解决方案是在调用
putenv()
之前使用PL_initialise()
将适当的路径放入环境中。...; putenv("SWI_HOME_DIR=C:\\Program Files\\swipl"); if ( PL_initialise(argc, argv) ) PL_halt(1); ...
在应用程序的最终版本中,您将保存状态链接到可执行文件(使用
swipl-ld
或cat
(Unix))并对putenv()
调用进行评论。