问题标签 [logtalk]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
1917 浏览

prolog - 定义用户无法查询的规则

如何定义用户无法查询的规则?我只希望程序本身通过另一个规则调用这个规则。

前任:

规则 1():- 规则 2()。

规则 2():- 1<5。

?-规则1()。

真的

?-rule2()。

(我不知道答案会是什么,我只是希望这个查询失败!)

0 投票
1 回答
291 浏览

user-interface - Logtalk 和 XPCE

可以同时使用 XPCE 和 Logtalk 开发应用程序,还是类系统在某些方面不兼容?

0 投票
1 回答
204 浏览

logtalk - Logtalk:meta::map、lambda 表达式和对私有方法的访问

我认为这是一个范围相关的问题。如果我对我的对象有这样的规则:

如果我跳这个舞,我觉得这很好用:

我不完全理解为什么这是必要的,但我怀疑它与我的实际问题有关,即如果我的对象中有标准 Prolog 循环,如下所示:

我发现这种使用::asserta将事实放在正确的名称空间中(在新创建的实例上)。但是,如果我机智地process_arguments/1用这个 lambda 表达式替换 的主体:

然后我将事实添加到父类并由所有实例共享。如果我用这个替换它:

process_arg/1然后它会起作用,但是当我不想这样做时,我必须制定一条公共规则。我错过了什么?

0 投票
1 回答
174 浏览

swi-prolog - Logtalk - logtalk_load 失败

我正在使用 swi prolog,并且刚刚安装了 logtalk。
当我用一些示例项目调用 logtalk_load 时,它总是返回 false。

我究竟做错了什么?

0 投票
2 回答
587 浏览

loading - Prolog SWI:Logtalk,如何加载我自己的项目文件?

所以这周包括我安装 Logtalk,Prolog 的扩展之一。在这种情况下,我使用的是 Prolog SWI,但遇到了一些障碍。我不确定如何使用 Logtalk 实际咨询我自己的项目。为了理解代码本身,我查看了 Logtalk 附带的示例,并且这样做我已经能够加载它们并完美地执行它们。我不明白的是当 logtalk 加载文件时实际发生了什么,以及如何加载我自己的项目。

我将以“hello_world”示例作为讨论的重点。名为 hello_world 的文件位于 Logtalk 文件的示例文件夹中。然而它的咨询是这样的:

我想到的第一件事是“这是一个仿函数”,使用跟踪查看它在做什么,我发现它是从库中调用的,并被告知如何进入示例文件夹,然后它打开了“hello_world " 文件夹,然后是 "loader" 文件。之后进行正常编译。

我看了看图书馆,不知道发生了什么。我还认为这不可能是在 Logtalk 中加载用户创建的项目的实用途径。还有另一个帖子询问如何使用 SWI 进行此操作,但没有任何回复,看起来也没有做出任何努力来解决问题。

现在让我明确一点,我可以使用“咨询('...')”。命令很好,我什至可以使用“咨询”来打开我的项目,但是如果我这样做,logtalk 控制台似乎没有使用任何 logtalk 扩展,所以只是 vanilla prolog。我已经使用 Windows 安装程序来安装 logtalk,并且我知道它正在工作,因为我一直在查看它附带的示例。

我试图找到一个教程,但很难找到 Logtalk 的大部分内容,我发现的最多的是这个关于从项目中加载的文档:

我这样理解:

因此,每次我都会有一个加载器文件来加载我项目的其他组件(这就是 Logtalk 的示例所做的),因此为了节省大量的手动加载。这一点对我来说很有意义,我认为,我如何获取我的加载器文件,没有。

我是否正确理解它还有待观察,但即使我理解正确,我仍然对如何加载自己的项目感到迷茫。感谢您提供的任何帮助,如果您能给出一个最好的示例,因为我确实很快从示例中学习。

小更新

您问我是否正在使用 logtalk 控制台来运行我的程序,而我正在使用在“QUICK_START”文件 [开始 > 程序 > Logtalk > “Logtalk - Prolog-SWI ( console)"] 我想仔细检查一下 logtalk 附加组件是否正常工作并测试了“birds”示例,因为它使用了对象并且是一个非常熟悉的示例。再一次,使用 logtalk_load/2 仿函数时一切正常。

鉴于到目前为止给出的反馈,我看了一下库路径所指的更多内容。研究 logtalk 如何加载文件。设置为到目前为止,没有改变任何事情 logtalk 咨询一个文件夹,其中包含一个名为 libpaths 的 prolog 文件。它基本上是如何找到示例的,它只是从何处获取文件的部分描述。因此,当我说“logtalk_load/2”时,至少我会去这个文件并找到我要的文件夹在哪里。

现在,由于我已经将自己的项目文件夹放在了示例文件夹中,因此我立即将自己的文件夹添加到列表中,以测试这是否至少是帮助我更多地理解事物的部分解决方案。我将以下内容添加到 libpaths.pl 文件中。

所以,我已经声明了我的文件夹路径,得到了我的文件夹,并且加载程序文件是我在使用加载程序时将调用的文件。不用考虑设置我自己的 lib 路径文件夹,我应该有足够的东西让事情正常工作并做一些实际的学习。但是很遗憾,我的调查似乎失败了,我收到了以下信息:

不是我想看到的,我回到这个图书馆错误业务。我在某处缺少对我的项目文件夹的引用,但我不知道它还需要在哪里引用。对此事进行跟踪并没有帮助我只是发生了以下情况:

通话失败,我根本找不到 logtalk 正在寻找的参考。当涉及到这些问题时,我充其量只是个新手,我现在使用计算机仅 3 年,过去 2 年在 Visual Studio 中使用 c# 和 c++ 进行编程。至少我已经对此事有了更多的了解,鉴于这些信息,还有什么更有用的建议吗?

0 投票
1 回答
189 浏览

prolog - 从 Logtalk 访问 SWI-Prolog 库

我在使用 Logtalk 时玩得很开心,但在使用phrase_from_file. 具体来说,我的情况如下所示:

麻烦就在于对phrase_from_file. 它无法找到scanlist,大概是因为它是该对象的本地对象,所以我收到此错误:

但是,如果我尝试使用这样的模块引用来扩大它:

我收到此错误:

如果我使用相同pio:phrase_from_file(this::scanlist(Scans), Filename)or 也一样pio:phrase_from_file(scan_parser::scanlist(Scans), Filename)。如果我在模拟 SWI 的模块设施时使用单个冒号,我会收到类似ERROR: phrase/3: Undefined procedure: scan_parser:scanlist/3.

我认为这里的问题是 SWI 的 PIO 库正在尝试构建一些可以交付的东西phrase,它只是不够智能。但这是我经常想到的事情,使用phrase_from_file/2,而且我敢肯定会有其他时候我想从 SWI 的图书馆中挖掘一些东西并借用它。正确的前进方向是什么?我想尽可能地保留 Logtalk 的封装。

谢谢!

0 投票
1 回答
72 浏览

swi-prolog - 无法使用 logtalk 3.0.0.1 加载带有 logtalk_load 的库

SWI Prolog用作支持的编译器(v 6.6.1)。安装logtalk3.0.0.1 后我开始收到错误

logtalk_load(库(types_loader),[source_data(on),report(on)])。

% [c:/users/dizqj373/documents/logtalk/library/termp.lgt 已加载]!域错误:值 alias/2 不在域指令中!在指令中:-别名(termp,[variables/2 as vars/2])!在文件 c:/users/dizqj373/documents/logtalk/library/term.lgt 的第 36-37 行之间警告:[线程 2] c:/users/dizqj373/documents/logtalk/library/lgt_tmp/types_loader.pl:5:初始化目标失败 % [ c:/users/dizqj373/documents/logtalk/library/types_loader.lgt 已加载 ] true。

你能帮助我并指导一下可能出了什么问题吗?谢谢!

0 投票
3 回答
146 浏览

optimization - Logtalk方法调用性能优化

在玩 Logtalk 时,似乎我的程序用 Logtalk 对象执行比普通 Prolog 执行的时间更长。我做了一个基准测试,比较了普通 Prolog 中简单谓词的执行与下面等效的 logtalk 对象封装:

这是我得到的:

我们可以看到logtalk_obj::simple callplain_prolog_simple调用慢。我使用 SWI Prolog 作为后端,我尝试设置一些日志对话标志,但没有成功。

编辑:我们可以在https://github.com/koryonik/logtalk-experiments/tree/master/benchmarks找到基准代码示例

怎么了 ?为什么会有这种性能差异?如何优化 Logtalk 方法调用?

0 投票
1 回答
128 浏览

prolog - 使用带有 Logtalk 对象方法的“univ”Prolog 谓词作为参数

如何使用带有 Logtalk 对象方法的 ' Univ '( ) prolog 谓词作为参数?=../2

考虑这段代码:

我将获得:

使用什么解决方法来进行良好的解释/编译?似乎问题与 swi-prolog 构建谓词predsort/3(如predsort/3 doc)相同。

0 投票
1 回答
55 浏览

logtalk - Logtalk : 在 Windows 上加载一个以驼峰命名的文件

使用 logtalk 3.1.2,在 OS X 和 Linux 下,加载驼峰名称的文件没有问题,但在 Windows 上会抛出异常(ERROR : file does not exist)。

怎么了 ?