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

Logtalk test returning failed when it passes under SWI interpreter

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

测试结果:

tests.lgt中的测试用例:

从 运行ning 到 swipl 的结果:

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

谢谢。

附带说明一下,“发现重复测试标识符”错误 必须 得到修复以获得准确的测试结果。测试标识符必须是唯一的,如 documented.

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

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

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

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