问题标签 [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.
swi-prolog - Logtalk:运行所有测试套件的最佳方式是什么?
在 Logtalk 代码示例中,每个示例都提供了自己的测试套件,可以在“独立”模式下运行(一次一个测试套件)。
但是,正如标题所说,我对同时测试所有测试套件(在我的应用程序中继承的所有已加载对象lgtunit
)的最佳方法感兴趣,并在最后对所有测试执行进行单一摘要(总通过/跳过/失败的)。
例如,在 SWI-Prolog 中,run_tests/0
运行所有测试单元。
prolog - 术语扩展工作流程
我正在为常见的术语扩展工作流添加库支持 (1)。目前,我已经定义了一个“设置”工作流,其中尝试了一组术语扩展规则 (2),直到其中一个成功,以及一个“管道”工作流,其中将一组术语扩展规则的扩展结果传递给管道中的下一组。我想知道是否还有其他合理的术语扩展工作流程,即使不太常见,也有实际用途,因此仍然值得图书馆支持。
(1) 对于 Logtalk,当前版本可以在以下位置找到:
https://github.com/LogtalkDotOrg/logtalk3/blob/master/library/hook_pipeline.lgt https://github.com/LogtalkDotOrg/logtalk3/blob/master/library/hook_set.lgt
(2) 在此上下文中,一组扩展规则应理解为term_expansion/2
用户定义的钩子谓词(也可能是goal_expansion/2
用户定义的钩子谓词)的一组子句,尽管考虑到用于目标的定点语义,这不太可能-expansion)在 Prolog 模块或 Logtalk 对象(user
伪模块/对象除外)中定义。
prolog - `foldl1/3` 和 `foldr1/3` 元谓词在空列表上的行为
寻求建议。我正在向Logtalk 库添加元谓词foldl1/3
。foldr1/3
这些可以很容易地定义:
使用这些定义,使用空列表调用元谓词就会失败。但这不允许区分由于闭包失败构造的隐式目标之一导致调用失败的情况。
如果您设想自己使用这些元谓词,您是否发现空列表上的失败是一种可接受的行为,或者您更愿意在这种情况下生成异常?
prolog - 通过 OO Prolog 中的多方法碰撞恒星物体?
我想知道如何在 Prolog 中结合统一和 OO。我想在术语对象上实现多方法调度。
如果没有术语对象和简单术语,我将执行以下操作,并且可以从多参数索引中受益:
但上面只给出了精确的类型匹配。
如果我想要一个子类类型匹配,我应该怎么做(可能还有更多的宇宙飞船子类,如 excelsior、galaxy 等。在案例 2,3 和 4 中也应该匹配)。
我还能使用统一和索引吗?
再见
PS:示例来自这里,它没有 Prolog 解决方案:
https ://en.wikipedia.org/wiki/Multiple_dispatch
database - 对象名称作为 Logtalk 中的变量
这是否可以将对象的名称作为变量获取?我正在尝试创建一个数据库,其中每个对象代表每个人。我有 [name/1, surname/1] 的对象,但是当我问例如
X::名字(约翰)。
它给了我一个错误。Ofc 使用这种方法获取原子是没有问题的:
object_id::name(X)。
object - 整数作为 Logtalk 中的 object_identifier
我有一个协议学生:
现在我想创建一个名称为 ID(整数)的对象,但是当我尝试这样做时create_object(18342, [implements(student)], [], [name(john), surname(smith), studies(it), marks(ok)]).
swilt 给 mi 错误:
错误:类型错误:预期为“object_identifier”,找到“18342”(整数)
Ofc 我可以使用引号,但我不想。是否可以选择使用整数作为名称,或者我是否使用字符串并将 id/1 添加到协议中?
object - 在 Logtalk 中将对象保存到文件
我已经编写了一个 prolog 项目,现在我必须将其更改为 Logtalk 文件。在代码中,我可以使用以下代码将新事实断言到另一个 prolog 文件:
现在我想在 Logtalk 中做一些类似的事情,但不是用事实,而是用对象。Ofc 我知道如何创建新对象(通过create_object/4
协议),但我不知道如何将它作为数据库保存在文件中。
该协议如下所示:
谁能帮我保存这些物品?
list - Logtalk 中的对象数
我有协议:
例如,我使用 制作了未知数量的对象,create_object/4
我如何获得它们的数量?得到他们的名字不是问题current_object/1
,但我需要一个整数!
http - swi prolog 8.0.2:gziped http
我试图制作一段打开http连接的代码。不过,网页可能会以纯文本或 gzip 格式传输。结果,具有实用主义的代码尝试以纯文本形式打开,如果失败并收到异常,则尝试将其视为 gzip 编码。
URL 是唯一的变量。例如,尝试使用 URL = ' http://releases.llvm.org/6.0.0/tools/clang/docs/ClangCommandLineReference.html '。
不幸的是,catch 的恢复部分不起作用。
请问有什么建议吗?
variables - 后期绑定变量?
我有 logtalk 规则要添加到 prolog DB 中:
它似乎工作正常.. 即它将规则分成两个单独的事实(稍后我会解释)。
但正如你所见,我失去了变量 X 的连接/统一变成“_”,即我想存储一个变量并稍后解释它,即后期绑定..我该怎么做?