从列表中删除Prolog

时间:2013-06-11 19:38:38

标签: list prolog

大家好我是prolog的新手,我有这样一个列表:(实际上它是我的谓词的输出而不是列表)

P = [1/1, 1/3] ;
P = [1/1, 2/3] ;
P = [1/3, 1/1] ;
P = [1/3, 2/1] ;
P = [2/1, 1/3] ;
P = [2/1, 2/3] ;
P = [2/3, 1/1] ;
P = [2/3, 2/1] ;

我需要删除dublicete术语。例如[1 / 1,2 / 3]和[2 / 3,1 / 1]是相同的,我应该删除其中一个,哪一个不重要,怎么可能我在prolog做那个?提前致谢

注意我了解到findALL应该是一个很好的方法,但仍然不知道答案,请帮助我。

1 个答案:

答案 0 :(得分:0)

除非你真的告诉我们你的代码,否则永远不可能给你准确的答案。

我假设您有一个谓词f/1,以便:

?- f(P).

生成您在上面显示的交互式结果。一个简单的解决方案是更改您的查询:

?- f([X,Y]), X < Y.

这将产生以下结果:

X = 1/3, Y = 1/1 ;
X = 1/3, Y = 2/1 ;
X = 2/3, Y = 1/1 ;
X = 2/3, Y = 2/1 ;

findall/3不足以解决这种特殊情况,因为您以忽略列表中位置的方式定义了唯一性。在Prolog(以及其他所有)中,[X,Y]和[Y,X]不相等,所以你必须找到一个技巧来让它给你“独特”的结果。