我试图将make_tests
的输出写入文件,但我尝试过的任何内容似乎都没有在输出文件中插入正确的信息。
我在http://www.complang.tuwien.ac.at/SWI-Prolog/Manual/IO.html查看了SWI文档,并尝试了大量这些谓词,但没有一个有效。
这是我想要做的事情:
:- use_module(library(test_wizard)).
init_test_file(FILE) :-
set_prolog_flag(log_query_file, FILE).
gen_test_in(FILE) :-
make_tests(lists, FILE, current_output).
所以运行它(在控制台中)例如:
init_test_file('mytest.pro').
member(a, [a,b]).
gen_test_in('mytest.pro').
我得到以下输出(在控制台中):
true.
6 ?- gen_test_in('r.pro').
:- begin_tests(lists).
test(member, [nondet]) :-
member(a, [a, b]).
:- end_tests(lists).
true.
如何在文本文件中获得相同的输出(从begin_tests
开始到end_tests
结束?
我尝试过将gen_test_in
修改为:
gen_test_in(FILE) :-
open(FILE, write, Out),
make_tests(lists, FILE, Out),
close(Out).
但我只是得到一个空文本文件。
答案 0 :(得分:6)
你搞砸了这里的论点。您正在使用的库library(test_wizard)
用于从查询生成测试。在您使用的谓词make_tests/3
中,您有以下三个参数:
在您使用的示例中,您可以将输出流设置为current_output
(如果您位于顶层,则为标准输出),或者,在您给出的最后一个示例中,您将打开文件想要阅读编写,然后将文件及其句柄传递给make_tests/3
。相反,如果您有一个名为queries.pl
的文件:
$ cat queries.pl
member(a, [a,b]).
member(X, [a,b]).
然后:
$ swipl
Welcome to SWI-Prolog (Multi-threaded, 64 bits, Version 7.3.16-36-g42820df)
Copyright (c) 1990-2015 University of Amsterdam, VU Amsterdam
SWI-Prolog comes with ABSOLUTELY NO WARRANTY. This is free software,
and you are welcome to redistribute it under certain conditions.
Please visit http://www.swi-prolog.org for details.
For help, use ?- help(Topic). or ?- apropos(Word).
?- use_module(library(test_wizard)).
true.
?- setup_call_cleanup(open('lists.plt', write, Out),
make_tests(lists, 'queries.pl', Out),
close(Out)).
Out = <stream>(0xe59ef0).
?- halt.
$ cat lists.plt
:- begin_tests(lists).
test(member, [nondet]) :-
member(a, [a, b]).
test(member, [all(A==[a, b])]) :-
member(A, [a, b]).
:- end_tests(lists).