我正在学习使用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解决这个练习......是否可能?
答案 0 :(得分:4)
setof(X, member(X,List), SortedList).
但这只是一种说法的方式
sort(List, SortedList).