我正在为学生作业评分,并希望自动在学生数据库上运行查询,并将这些查询的结果打印到文件中。我遇到的问题是我希望运行多个查询,但找不到一种方法来添加我希望作为命令行参数的所有查询。
相关文件
学生提交 Prolog 文件:
我无法向您展示这段代码,但学生们必须使用 Prolog 解决 4 个问题,并且我可以访问这些文件。
hw4_autograde.sh
注意:编译器已更改为 SWI-prolog,而不是 gprolog。
testcases.txt
: 这些是我希望运行的测试用例。它们包括对学生解决的 4 条规则/“功能”的各种调用。
我能够创建并附加到输出文件,但我需要先让我的 bash 脚本工作,然后可以添加所需的代码来做到这一点。任何帮助或正确方向的观点都是最有帮助的。
我试图仔细检查这篇文章,但我很难让它发挥作用:
https://lists.gnu.org/archive/html/users-prolog/2013-12/msg00004.html
谢谢你。
编辑:
Paulo Moura 在评论中描述的解决方案解决了这个问题,但是,在使用 logtalk 测试器时,我遇到了在提交中的子目录中使用多个 prolog 文件的问题。我曾经在学生文件正常工作的情况下获得输出,但现在所有测试都说崩溃了,当我过去通过或失败时:这是我当前运行时得到的屏幕截图logtalk_tester -p swi -t 60
:
以下是学生子目录中内容的屏幕截图:
这里是tests.lgt
:
:- object(tests,
extends(lgtunit)).
%Tests for shuffle
%--------------------------------------------------------
test(shuff_working) :-
{shuffle([a,b,c],[d,e,f],[a,d,b,e,c,f])}.
test(shuff_wrong, false) :-
{shuffle([a,b,d],[d,e,f],[a,d,b,e,c,f])}.
test(shuff_wrong_2, false) :-
{shuffle([d,e,f],[a,b,d],[a,d,b,e,c,f])}.
test(shuff_wrong_3, false) :-
{shuffle([a,b,c,e],[d,e,f],[a,d,b,e,c,f])}.
test(shuff_var) :-
{shuffle(X,Y,[1,2,3,4,5,6])}.
%--------------------------------------------------------
%Tests for double
test(doub_working) :-
{double([a,b,c],[a,a,b,b,c,c])}.
test(doub_wrong, false) :-
{double([a,b,c],[a,b,c,a,b,c])}.
test(doub_var_1) :-
{double(X,[a,a,b,b,c,c])}.
test(doub_var_2) :-
{double([a,b,c],X)}.
%--------------------------------------------------------
%Part 2: Sudoku Solver
test(sudoku, false) :-
{test0}.
:- end_object.
这是tester.lgt
:- initialization((
% minimize output to the essential
set_logtalk_flag(report, warnings),
% load the student submissions
logtalk_load(['hw4.pl','sudoku.pl']),
% load the testing tool
logtalk_load(lgtunit(loader)),
% load the tests and run them
logtalk_load(tests, [hook(lgtunit)]),
tests::run
)).