一个谓词,检查另一个谓词的输出?

时间:2016-03-06 14:22:41

标签: list prolog predicate

我有一个谓词检查列表中的重复项,如果没有重复项则返回true,如果存在重复项则返回false:

removeDups([], []).
removeDups([H|T], [H|T1]) :- subtract(T, [H], T2), removeDups(T2, T1).

我想编写另一个谓词,它基本上会检查removeDups是否成功地从列表中删除重复项,同时保留其他列表项。例如,谓词testRemoveDuplicates / 1,其中输入是列表。我不知道如何去做这件事。

提前致谢。

1 个答案:

答案 0 :(得分:0)

remove_dups(+ List,?Pruned) Sicstus

从List中删除重复的元素,这应该是一个正确的列表。

<强>测试

| ?- remove_dups([item0,item1,item0,item2,item3,item4,item2], Pruned).
Pruned = [item0,item1,item2,item3,item4] ? ;
no
% source_info
| ?- remove_dups([item0,item1,item0,item2,item3,item4,item2], [item0,item1,item2,item3,item4]).
yes

如果你想整合你的谓词

testRemoveDuplicates(ListResult) :- removeDups(ListResult,ListResult).