检查另一个谓词输出的谓词?
A predicate that checks the output of another predicate?
我有一个谓词用于检查列表中的重复项,returns如果没有重复项则为真,如果存在重复项则为假:
removeDups([], []).
removeDups([H|T], [H|T1]) :- subtract(T, [H], T2), removeDups(T2, T1).
我想写另一个谓词,它基本上会检查 removeDups 是否成功地从列表中删除了重复项,同时保留其他列表项仍然存在。因此,例如输入为列表的谓词 testRemoveDuplicates/1。不过我不确定该怎么做。
提前致谢。
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).
我有一个谓词用于检查列表中的重复项,returns如果没有重复项则为真,如果存在重复项则为假:
removeDups([], []).
removeDups([H|T], [H|T1]) :- subtract(T, [H], T2), removeDups(T2, T1).
我想写另一个谓词,它基本上会检查 removeDups 是否成功地从列表中删除了重复项,同时保留其他列表项仍然存在。因此,例如输入为列表的谓词 testRemoveDuplicates/1。不过我不确定该怎么做。
提前致谢。
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).