我是一个完整的菜鸟试图写谓词而且我有点卡住了。之前,我创建了一个名为'remDuplicates / 2'的谓词,如果谓词的第二个列表是第一个删除了重复项的列表,则表示为true。请参阅下面的代码,了解我正在使用的谓词。
remDuplicates([], []).
remDuplicates([H|T], [H|T1]) :- subtract(T,[H],T2), remDuplicates(T2, T1).
但是,现在我正在尝试创建一个新的谓词,它使用'remDuplicates'从单个列表中删除重复,称为'remT / 1'。 'remT / 1'采用单个参数,应该使用'remDuplicates'谓词删除任何重复,然后返回新列表(没有任何重复)。
我已经尝试过它应该如何开始,但实际上,我不知道该去哪里。请看下面我尝试的开始;
remT([]).
remT([H|T]) :- remDuplicates([H|T],[H|T]).
非常感谢这方面的帮助。谢谢。
答案 0 :(得分:0)
正如鲍里斯告诉你的那样,在Prolog中没有“返回”之类的东西,但是,你可以像这样召唤你的remDuplicates / 2:
remDuplicates([1,2,2,3,4,5,7,5],T)。
这样,T将是最终列表,没有重复。然后,您可以在更大的谓词中使用它,或者只在终端上运行它,因为它将在屏幕上打印类似“T = [1,2,3,4,5,7]”的内容。
您还可以查看已在SWI-Prolog中构建的sort / 2谓词,该结果与您的结果类似。
希望它有所帮助,
安德烈·平托