如何从prolog中的两个列表创建原子对列表?

时间:2011-10-12 02:13:20

标签: prolog

我是prolog的新手。 让我告诉你我想在下面作为评论......

% ?-pair([1,2],[a,b],Result).
% Result= [{1,a},{1,b},{2,a},{2,b}].

我做的是..

pair([],Q,[]).
pair(P,[],[]).
pair([A|P],[B|Q],[{A,B}|R]) :- pair([A|P],Q,R).
pair([A|P],[B|Q],[{A,B}|R]) :- pair(P,[B|Q],R).

使用此代码我得到如下结果:

?- pair([1,2],[a,b],R).
R = [{1, a}, {1, b}] ;
R = [{1, a}, {1, b}, {2, b}] ;
R = [{1, a}, {1, b}, {2, b}] ;
R = [{1, a}, {2, a}, {2, b}] ;
R = [{1, a}, {2, a}, {2, b}] ;
R = [{1, a}, {2, a}] ;
false.

我想要一行不重复..

2 个答案:

答案 0 :(得分:4)

你应该向Prolog解释你想要什么(什么是配对,如何建立它),然后让Prolog找到所有配对。

答案 1 :(得分:2)

你可以通过列出L2中L1和B中的所有对A来收集所有对{A,B}在另一个列表中:

pair(L1, L2, Pairs):-
  findall({A,B}, (member(A, L1), member(B, L2)), Pairs).

?-pair([1,2],[a,b],Result).
Result = [{1, a}, {1, b}, {2, a}, {2, b}].