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

时间:2013-03-13 20:43:38

标签: list prolog

我是Prolog的新手,我无法弄清楚如何获得结果。

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

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

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:1)

正如丹尼尔指出的那样,你应该试着自己找到解决方案。

你可以只用一个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)不同。