-2

我正在使用 SWI Prolog 为大学考试学习 Prolog,并且我有以下练习:

编写从 ListWithDuplicates 列表(允许重复的列表)开始构建 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).

我尝试将其分为两种情况:基本情况:从空列表开始创建的没有重复的列表它是一个空的欲望和与 ListWithDuplicates 不为空的情况相关的规则,因此 ListWithoutDiplicares 必须是列表中允许重复的集合的结果...

我不知道使用 setof 来解决这个练习……有可能吗?

4

1 回答 1

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

但这只是一种迂回的说法

sort(List, SortedList).
于 2013-04-16T11:44:54.893 回答