我可以使用setof谓词来构建一个没有重复的列表,从具有重复的列表开始吗?

时间:2013-04-16 10:55:28

标签: prolog

我正在学习使用SWI Prolog进行大学考试的Prolog,我有以下练习:

  

编写从ListWithDuplicates开始的重复谓词   list(允许重复的列表)构建ListWithoutduplicates   (包含前一个列表中的相同元素但没有   一式两份):

     

重复(ListWithDuplicates,ListWithoutduplicates)。

我认为我必须使用内置谓词中的 setof 解决它,因为我在与此参数相关的部分中找到了此练习,因为setof创建了一个没有重复的有序列表。

问题是我总是使用 setof 放入订单列表而不重复某些由事实表示的对象,我不知道如何在列表上工作...

我尝试过这样的事情(但是错了,我知道):

/* FACT (BASE CASE): If the ListWithDuplicates is empty it is TRUE that the
                     ListWithoutDuplicates is empty:
*/
duplicates([], []).

duplicates(ListWithDuplicates, ListWithoutDuplicates) :-
                         setof(_, ListWithDuplicates, ListWithoutDuplicates).

我试图在两种情况下划分它:一个基本案例:列表withoud duplicated从一个空列表开始创建它是一个空的欲望和一个与ListWithDuplicates不为空的情况相关的规则,所以ListWithoutDiplicares有是允许重复的列表上的setof的结果......

我不知道用setof解决这个练习......是否可能?

1 个答案:

答案 0 :(得分:4)

setof(X, member(X,List), SortedList).

但这只是一种说法的方式

sort(List, SortedList).