我正在使用 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 来解决这个练习……有可能吗?