问题标签 [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.
prolog - 定义用户无法查询的规则
如何定义用户无法查询的规则?我只希望程序本身通过另一个规则调用这个规则。
前任:
规则 1():- 规则 2()。
规则 2():- 1<5。
?-规则1()。
真的
?-rule2()。
(我不知道答案会是什么,我只是希望这个查询失败!)
user-interface - Logtalk 和 XPCE
可以同时使用 XPCE 和 Logtalk 开发应用程序,还是类系统在某些方面不兼容?
logtalk - Logtalk:meta::map、lambda 表达式和对私有方法的访问
我认为这是一个范围相关的问题。如果我对我的对象有这样的规则:
如果我跳这个舞,我觉得这很好用:
我不完全理解为什么这是必要的,但我怀疑它与我的实际问题有关,即如果我的对象中有标准 Prolog 循环,如下所示:
我发现这种使用::asserta
将事实放在正确的名称空间中(在新创建的实例上)。但是,如果我机智地process_arguments/1
用这个 lambda 表达式替换 的主体:
然后我将事实添加到父类并由所有实例共享。如果我用这个替换它:
process_arg/1
然后它会起作用,但是当我不想这样做时,我必须制定一条公共规则。我错过了什么?
swi-prolog - Logtalk - logtalk_load 失败
我正在使用 swi prolog,并且刚刚安装了 logtalk。
当我用一些示例项目调用 logtalk_load 时,它总是返回 false。
我究竟做错了什么?
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++ 进行编程。至少我已经对此事有了更多的了解,鉴于这些信息,还有什么更有用的建议吗?
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 的封装。
谢谢!
swi-prolog - 无法使用 logtalk 3.0.0.1 加载带有 logtalk_load 的库
我SWI Prolog
用作支持的编译器(v 6.6.1)。安装logtalk
3.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。
你能帮助我并指导一下可能出了什么问题吗?谢谢!
optimization - Logtalk方法调用性能优化
在玩 Logtalk 时,似乎我的程序用 Logtalk 对象执行比普通 Prolog 执行的时间更长。我做了一个基准测试,比较了普通 Prolog 中简单谓词的执行与下面等效的 logtalk 对象封装:
这是我得到的:
我们可以看到logtalk_obj::simple call
比plain_prolog_simple
调用慢。我使用 SWI Prolog 作为后端,我尝试设置一些日志对话标志,但没有成功。
编辑:我们可以在https://github.com/koryonik/logtalk-experiments/tree/master/benchmarks找到基准代码示例
怎么了 ?为什么会有这种性能差异?如何优化 Logtalk 方法调用?
prolog - 使用带有 Logtalk 对象方法的“univ”Prolog 谓词作为参数
如何使用带有 Logtalk 对象方法的 ' Univ '( ) prolog 谓词作为参数?=../2
考虑这段代码:
我将获得:
使用什么解决方法来进行良好的解释/编译?似乎问题与 swi-prolog 构建谓词predsort/3
(如predsort/3 doc)相同。
logtalk - Logtalk : 在 Windows 上加载一个以驼峰命名的文件
使用 logtalk 3.1.2,在 OS X 和 Linux 下,加载驼峰名称的文件没有问题,但在 Windows 上会抛出异常(ERROR : file does not exist
)。
怎么了 ?