0

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

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

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

任何帮助是极大的赞赏。

4

1 回答 1

1

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

只需一个 findall/3 即可获得结果,使用 append/3将配对的第一个元素和其余元素放在一起,单个 member/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) 不同。

于 2013-03-13T20:59:03.193 回答