在 SWI 解释器下通过时 Logtalk 测试返回失败

问题描述

我遇到了一个问题,当我将它放入测试套件并通过 logtalk 传递时,特定测试返回 false,但当我通过使用相同后端的解释器运行它时返回 true(这是所需的行为)编译器(SWI-Prolog)。以下是 logtalk 测试结果的相关部分、学生目录中测试内容的快照,以及我通过 SWI 解释器通过相同测试时的输出

测试结果:

enter image description here

tests.lgt 中的测试用例:

enter image description here

通过 swipl 运行的结果:

enter image description here

如有任何帮助,我们将不胜感激。

谢谢。

解决方法

作为旁注,“发现重复测试标识符”错误必须被修复以获得准确的测试结果。测试标识符必须是唯一的,如 documented

您的问题中没有足够的信息来诊断问题。在测试定义中使用 {}/1 控制构造来包装测试目标意味着该目标按原样调用。我的建议是让您 cd 到您看到问题的学生目录,然后手动运行测试,然后在顶层调用测试目标。类似的东西:

$ cd student_id_xyz
$ swilgt
...
?- {tester}.
...
?- no_duplicates(...,...).
...

执行此操作无需重新启动,以便我们保证两个测试(来自测试文件并在顶级输入)发生在完全相同的上下文中。如果您得到相同的结果,请告诉我们。

我为您的学生评分任务建议的解决方案假定学生 Prolog 文件是普通 Prolog 文件(即没有模块定义)。如果某些学生提交的情况不是这种情况,请尝试更改 tester.lgt 驱动程序文件中学生 Prolog 文件的加载,而不是使用 Prolog 后端的 logtalk_load/1 谓词(为可移植性而选择)特定谓词(例如 consult/1)。