【问题标题】:Logtalk test returning failed when it passes under SWI interpreterLogtalk 测试在 SWI 解释器下通过时返回失败
【发布时间】:2021-08-01 15:44:13
【问题描述】:
我遇到一个问题,当我将特定测试放入测试套件并通过 logtalk 传递时,它返回 false,但当我使用相同后端通过解释器运行它时返回 true(这是所需的行为)编译器(SWI-Prolog)。这是 logtalk 测试结果的相关部分,学生目录中测试的快照,以及当我通过 SWI 解释器通过相同测试时的输出。
测试结果:
tests.lgt 中的测试用例:
通过swipl运行的结果:
任何帮助将不胜感激。
谢谢。
【问题讨论】:
标签:
prolog
swi-prolog
logtalk
【解决方案1】:
附带说明,“发现重复的测试标识符”错误必须修复以获得准确的测试结果。测试标识符必须是唯一的 documented。
您的问题中没有足够的信息来诊断问题。在测试定义中使用{}/1 控制结构来包装测试目标意味着该目标是按原样调用的。我的建议是让你 cd 到你看到问题的学生目录,手动运行测试,然后在顶层调用测试目标。比如:
$ cd student_id_xyz
$ swilgt
...
?- {tester}.
...
?- no_duplicates(..., ...).
...
执行此操作无需重新启动,以便我们保证两个测试(来自测试文件并在顶层键入)在相同的确切上下文中发生。如果您得到相同的结果,请告诉我们。
我为您的学生评分任务建议的解决方案假定学生 Prolog 文件是 plain Prolog 文件(即没有模块定义)。如果某些学生提交的情况并非如此,请尝试通过 Prolog 后端特定谓词(例如consult/1)。