我正在编写一个 prolog 程序来检查变量是否为 integer。我“返回”结果的方式很奇怪,但我认为这对于回答我的问题并不重要。
测试
我已经为此行为编写了通过单元测试;他们来了...
foo_test.pl
:- begin_tests('foo').
:- consult('foo').
test('that_1_is_recognised_as_int') :-
count_ints(1, 1).
test('that_atom_is_not_recognised_as_int') :-
count_ints(arbitrary, 0).
:- end_tests('foo').
:- run_tests.
编码
这是通过这些测试的代码......
foo.pl
count_ints(X, Answer) :-
integer(X),
Answer is 1.
count_ints(X, Answer) :-
\+ integer(X),
Answer is 0.
输出
测试通过了,这很好,但是当我运行它们时收到警告。这是运行测试时的输出...
?- ['foo_test'].
% foo compiled into plunit_foo 0.00 sec, 3 clauses
% PL-Unit: foo
Warning: /home/brandon/projects/sillybin/prolog/foo_test.pl:11:
/home/brandon/projects/sillybin/prolog/foo_test.pl:4:
PL-Unit: Test that_1_is_recognised_as_int: Test succeeded with choicepoint
. done
% All 2 tests passed
% foo_test compiled 0.03 sec, 1,848 clauses
true.
- 我正在使用 SWI-Prolog(多线程,64 位,版本 6.6.6)
- 我尝试
count_ints
使用 将这两个谓词合并为一个;
,但它仍然会产生相同的警告。 - 我在 Debian 8 上(我怀疑它会有所作为)。
问题
- 这个警告是什么意思?和...
- 我该如何预防?