所以这周包括我安装 Logtalk,Prolog 的扩展之一。在这种情况下,我使用的是 Prolog SWI,但遇到了一些障碍。我不确定如何使用 Logtalk 实际咨询我自己的项目。为了理解代码本身,我查看了 Logtalk 附带的示例,并且这样做我已经能够加载它们并完美地执行它们。我不明白的是当 logtalk 加载文件时实际发生了什么,以及如何加载我自己的项目。
我将以“hello_world”示例作为讨论的重点。名为 hello_world 的文件位于 Logtalk 文件的示例文件夹中。然而它的咨询是这样的:
| ?- logtalk_load(hello_world(loader)).
我想到的第一件事是“这是一个仿函数”,使用跟踪查看它在做什么,我发现它是从库中调用的,并被告知如何进入示例文件夹,然后它打开了“hello_world " 文件夹,然后是 "loader" 文件。之后进行正常编译。
我看了看图书馆,不知道发生了什么。我还认为这不可能是在 Logtalk 中加载用户创建的项目的实用途径。还有另一个帖子询问如何使用 SWI 进行此操作,但没有任何回复,看起来也没有做出任何努力来解决问题。
现在让我明确一点,我可以使用“咨询('...')”。命令很好,我什至可以使用“咨询”来打开我的项目,但是如果我这样做,logtalk 控制台似乎没有使用任何 logtalk 扩展,所以只是 vanilla prolog。我已经使用 Windows 安装程序来安装 logtalk,并且我知道它正在工作,因为我一直在查看它附带的示例。
我试图找到一个教程,但很难找到 Logtalk 的大部分内容,我发现的最多的是这个关于从项目中加载的文档:
logtalk_load/1.
logtalk_load/2.
我这样理解:
logtalk_load(file). % Top level loading
logtalk_load(folder(file). % Bottom level loading
因此,每次我都会有一个加载器文件来加载我项目的其他组件(这就是 Logtalk 的示例所做的),因此为了节省大量的手动加载。这一点对我来说很有意义,我认为,我如何获取我的加载器文件,没有。
我是否正确理解它还有待观察,但即使我理解正确,我仍然对如何加载自己的项目感到迷茫。感谢您提供的任何帮助,如果您能给出一个最好的示例,因为我确实很快从示例中学习。
小更新
您问我是否正在使用 logtalk 控制台来运行我的程序,而我正在使用在“QUICK_START”文件 [开始 > 程序 > Logtalk > “Logtalk - Prolog-SWI ( console)"] 我想仔细检查一下 logtalk 附加组件是否正常工作并测试了“birds”示例,因为它使用了对象并且是一个非常熟悉的示例。再一次,使用 logtalk_load/2 仿函数时一切正常。
鉴于到目前为止给出的反馈,我看了一下库路径所指的更多内容。研究 logtalk 如何加载文件。设置为到目前为止,没有改变任何事情 logtalk 咨询一个文件夹,其中包含一个名为 libpaths 的 prolog 文件。它基本上是如何找到示例的,它只是从何处获取文件的部分描述。因此,当我说“logtalk_load/2”时,至少我会去这个文件并找到我要的文件夹在哪里。
现在,由于我已经将自己的项目文件夹放在了示例文件夹中,因此我立即将自己的文件夹添加到列表中,以测试这是否至少是帮助我更多地理解事物的部分解决方案。我将以下内容添加到 libpaths.pl 文件中。
logtalk_library_path(my_project, examples('my_project/')).
% The path must end in a / so I have done so
所以,我已经声明了我的文件夹路径,得到了我的文件夹,并且加载程序文件是我在使用加载程序时将调用的文件。不用考虑设置我自己的 lib 路径文件夹,我应该有足够的东西让事情正常工作并做一些实际的学习。但是很遗憾,我的调查似乎失败了,我收到了以下信息:
ERROR: Unhandled exception: existence_error(library,project_aim)
不是我想看到的,我回到这个图书馆错误业务。我在某处缺少对我的项目文件夹的引用,但我不知道它还需要在哪里引用。对此事进行跟踪并没有帮助我只是发生了以下情况:
Call: (17) logtalk_library_path(my_project, _G943) ? creep
Fail: (17) logtalk_library_path(my_project, _G943) ? creep
ERROR: Unhandled exception: existence_error(library,my_project)
通话失败,我根本找不到 logtalk 正在寻找的参考。当涉及到这些问题时,我充其量只是个新手,我现在使用计算机仅 3 年,过去 2 年在 Visual Studio 中使用 c# 和 c++ 进行编程。至少我已经对此事有了更多的了解,鉴于这些信息,还有什么更有用的建议吗?