List 如何从Prolog中的一个列表中获取对?

List 如何从Prolog中的一个列表中获取对?,list,prolog,List,Prolog,我是Prolog新手,不知道如何获得结果 我想计算列表中可能的成对组合 示例:输入是一个列表[a,b,c],我想获得对(a,b),(a,c),(b,c)。我希望每一对都保存为一个列表 非常感谢您的帮助。正如丹尼尔所指出的,您应该尝试自己找到解决方案 您只需使用单个findall/3即可获得结果,使用append/3将对中的第一个元素和其余元素组合在一起,单个成员/2就足以选择对中的第二个元素 当然,实际的解决方案要简单得多,更清晰。如果你试着组装它,你会学到很多 all_pairs(L, R)

我是Prolog新手,不知道如何获得结果

我想计算列表中可能的成对组合

示例:输入是一个列表[a,b,c],我想获得对(a,b),(a,c),(b,c)。我希望每一对都保存为一个列表


非常感谢您的帮助。

正如丹尼尔所指出的,您应该尝试自己找到解决方案

您只需使用单个findall/3即可获得结果,使用append/3将对中的第一个元素和其余元素组合在一起,单个成员/2就足以选择对中的第二个元素

当然,实际的解决方案要简单得多,更清晰。如果你试着组装它,你会学到很多

all_pairs(L, R) :-
    findall((A,B), (..., ...), R).
屈服

?- all_pairs([a,b,c],L).
L = [ (a, b), (a, c), (b, c)].
编辑您只需要修复详细信息:

...((A,B), (append(_, [A|T], L), ...), R).
在上下文中生成第一个元素,并且您知道如何获得B


注意[A,B]与你在问题中要求的(A,B)不同。

这项作业的哪一部分让你感到困惑?你试过写什么?对于一个这么小的问题,很难给出一般性的帮助,而这不等于给你一个完整的答案。我想既然你是个学生,你就不想通过作弊来进行学术欺诈。这就是我到目前为止所做的:配对(L,R):-findall((a,B),(成员(a,L),成员(B,L),a\==B,R)。但是我没有3双,我有6双。。这是输出:L=[(a,b),(a,c),(b,a),(b,c),(c,b)]。我只需要(a,b),(a,c),(b,c)谢谢你的帮助。。这就是我使用append所做的:'pairs(L,R):-findall([A,B],(append(A,X,L),A\=[],member(B,X)),R.'这是输出:“L=[[[a],b],[a],c],[a,b],c].”第三对中仍然有一个错误,如何更正?非常感谢你的帮助。