所以这一周,我安装了Logtalk,这是Prolog的扩展之一。在这种情况下,我正在使用Prolog SWI,并且遇到了一些问题。我不确定如何使用Logtalk实际咨询我自己的项目。为了理解代码本身,我已经看了Logtalk自带的例子,这样我就可以加载并完美地执行它们。我不明白的是当logtalk加载文件时实际发生的事情,以及我如何加载自己的项目。Prolog SWI:Logtalk,如何加载我自己的项目文件?
我会以“hello_world”为例讨论问题。名为hello_world的文件位于Logtalk文件的示例文件夹中。但它被咨询,像这样:
| ?- logtalk_load(hello_world(loader)).
第一件事,我认为是“这是一个函子”,看着使用跟踪它在做什么,我发现,它被从库打来电话,被告知如何进入examples文件夹,然后打开“hello_world”文件夹,然后打开“loader”文件。之后正常编译发生。
我看了看图书馆,无法弄清楚发生了什么。我也认为这不可能是在Logtalk中加载用户创建的项目的实际路线。还有一篇文章是在问如何与SWI做到这一点,但没有任何答复,也没有看到任何努力来解决这个问题。
现在让我明确一些事情,我可以使用“咨询('...')”。命令就好了,我甚至可以使用“consult”打开我的项目,但是如果我这样做的话,logtalk控制台似乎没有使用任何logtalk扩展,所以只是香草序言。我已经使用Windows的安装程序来安装logtalk,我知道它正在工作,因为我一直在看它附带的示例。
我试图找到一个教程,但它是很难找到任何东西的Logtalk,我发现最多的是上载该文件从您的项目中:
logtalk_load/1.
logtalk_load/2.
我理解像这样:
logtalk_load(file). % Top level loading
logtalk_load(folder(file). % Bottom level loading
所以每次都保存一个巨大的人工负载我想有一个加载程序文件将加载我的项目的其他组件(这是什么Logtalk的例子一样)。这一点对我来说很有意义,我想,我如何到达我的加载程序文件,没有。
我是否正确地理解了它,还有待观察,但即使我已经正确理解了它,但我仍然对如何加载自己的项目感到迷茫。感谢您提供的任何帮助,如果您能举出一个最好的例子,我很快就会从例子中学习。
LITTLE UPDATE
你问我是不是使用logtalk控制台我的程序运行,而我,我使用的是提供并在“QUICK_START”文件[开始>程序中提到的一个> Logtalk>“Logtalk - Prolog-SWI(console)”]我想仔细检查logtalk add是否正在工作并测试了“鸟”示例,因为它使用了对象,并且是一个很好的熟悉示例。再次,使用logtalk_load/2仿函数时,一切正常。
考虑到目前给出的反馈,我看看库路径指的是多一点。研究logtalk如何加载文件。按照目前的设置,在不改变事情的情况下,logtalk会查询包含名为libpaths的序言文件的文件夹。它基本上是如何找到这些示例的,它只是从哪里获取文件的部分描述。所以当我说“logtalk_load/2”时,至少我可以告诉这个文件并找到我要求的文件夹。
现在,因为我已经在examples文件夹中放置了自己的项目文件夹,所以我立即将自己的文件夹添加到列表中以测试这是否至少可以成为部分解决方案,以帮助我更好地理解事情。我将以下内容添加到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年的时间使用电脑,而使用c#和C++的视觉工作室使用过去的2年编程。至少我已经更多地了解了这个问题,在给出这些信息的情况下,还有更多有用的建议吗?
谢谢,我现在正在运行。我还有一个问题:正如Daniel已经指出的那样,settings.lgt中还有一行表示文件夹声明。 logtalk_library_path(项目,'$ HOME/projects /')。假设我想创建一个项目文件夹,$ HOME部分是一个未声明的变量,如果我要为此声明一个路径,是否必须声明完整路径或是否有合适的方式来使用logtalk的默认路径就像你说的那样,我已经知道什么时候安装了?只是好奇,会很方便知道。 –
在Windows上,使用例如SWI-Prolog或GNU Prolog作为后端Prolog编译器时,已经定义了一个名为'home'的库(其他一些Prolog编译器未能正确地扩展环境变量)。因此,您可以定义其他库,其中'home'为root,就像您引用的'logtalk_library_path(projects,'$ HOME/projects /')'示例。您也可以将'%HOME%'定义为Windows环境变量。 –
你也可以使用'logtalk_library_path(projects,home('projects /'))'。 –