我的谓词EO应该如此,
?- eo([a,b,c,d,e,f],L).
L = [b,d,f]
我的代码现在是
eo([], []).
eo([_,X|L], [X | R]) :-
eo(L, R).
,但仅在给定列表作为偶数元素时起作用。当给出带有奇数元素的列表时,它只是输出false。有建议吗?
编辑:
?- eo([a,b,c,d,e,f,g],L).
L = [b,d,f]
是列表中奇数元素的预期结果。
此解决方案正在工作
eo([],[]).
eo([_],[]).
eo([_,X|L],[X|R]) :- eo(L,R).
您需要拥有处理一个元素列表的第二行,
QuickCheck不仅可以帮助您查找故障谓词查询,而且还可以 narrow 降低那些失败的查询到最简单的查询。在这种情况下,使用LogTalk的lgtunit
工具QuickCheck支持:
?- lgtunit::quick_check(eo(+list(character), -list(character))).
* quick check test failure:
* eo([d],[])
false.
将失败查询与您的代码进行比较,可以清楚地清楚(其他)答案和评论中指出的错误:没有单个元素处理输入列表的子句。
但请记住,QuickCheck会生成随机测试查询,因此只能显示出失败的查询,而不是证明正确性。