Prolog 谓词 - returns 列表,其中从特定谓词中删除了重复项

Prolog predicate - returns list with duplicates removed from specific predicate

我是一个完全的菜鸟,正在尝试编写谓词,但我有点卡住了。早些时候,我创建了一个名为 remDuplicates/2 的谓词,如果谓词的第二个列表是第一个列表并删除了任何重复项,它会声明为真。请参阅下面的代码了解我正在使用的谓词。

   remDuplicates([], []).
   remDuplicates([H|T], [H|T1]) :- subtract(T,[H],T2), remDuplicates(T2, T1).

但是,现在我正在尝试创建一个新的谓词,它使用 remDuplicates 从一个名为 remT/1 的列表中删除重复项。 remT/1 采用单个参数,应使用 remDuplicates 谓词删除任何重复项,然后 return 新列表(没有任何重复项)。

我已经尝试过它应该如何开始,但实际上,我不知道从哪里开始。请在下面查看我尝试的开始;

  remT([]).
  remT([H|T]) :- remDuplicates([H|T],[H|T]).

非常感谢对此的帮助。谢谢。

正如鲍里斯告诉你的那样,在 Prolog 中没有“返回”这样的东西,但是,你可以这样调用你的 remDuplicates/2

remDuplicates([1,2,2,3,4,5,7,5], T).

这样,T 将是没有重复的最终列表。然后您可以在更大的谓词中使用它,或者只是在终端上使用 运行,因为它会在屏幕上打印类似 T = [1,2,3,4,5,7].

的内容

您还可以查看 sort/2 谓词,它的结果与您的相似,已内置于 SWI-Prolog 中。

希望对您有所帮助,
安德烈·平托