有没有办法将元素添加到列表中,而不关心它是否已经存在并且列表仍然不包含重复项?
问问题
394 次
3 回答
2
您可以先检查该项目是否包含在列表中,如果不包含则添加它。例如:
add_no_duplicates(List, Item, NList):-
member(Item, List) -> NList=List ; NList=[Item|List].
测试:
?- add_no_duplicates([a,b,c],d,L).
L = [d, a, b, c].
?- add_no_duplicates([a,b,c,d],d,L).
L = [a, b, c, d].
请注意,所写的 add_no_duplicates/3 需要实例化输入列表(List)。
于 2012-07-24T13:20:04.603 回答
2
如果您正在寻找效率,有比列表更好的数据结构,可以在 SWI-Prolog 中使用。特别是,您的用例适合add_nb_set (+Key, !Set, ?New)。
参数New
控制 WRT 重复的行为:你应该使用true
for don't care。参数Set
必须与empty_nb_set(Set)
编辑:我很抱歉,参数Set
必须是一个免费的变量don't care behaviour
,例如add_nb_set(Key, Set, _)
,如文档页面所示......
于 2012-07-24T16:58:58.340 回答