如何在prolog中生成2个列表的所有组合

时间:2017-02-27 16:26:31

标签: prolog

我需要生成2个列表的组合,每个列表包含4个元素。

例如,list([1,2,3,4],[x,y,w,z],L).应返回

L = [(1,x),(1,y),(1,w),(1,z),(2,x),(2,y)|...]作为答案。

这是我的代码:

comb([],[],[]).
comb([H1|_],[H2|_],[H1|H2]).
comb([_|T1],[_|T2],L):- comb(T1,T2,L).

...并打印出来:

L = [1|y] ;
L = [2|x] ;
L = [].

......这不是正确的答案。有人可以帮我解决这个问题吗?

1 个答案:

答案 0 :(得分:2)

您的问题可以表达为:

  

查找所有对(X, Y),使X成为List1的成员,Y1成为List2的成员。

这可以直接翻译成Prolog:

list_pairs(List1, List2, Pairs) :-
    findall((X,Y), (member(X, List1), member(Y, List2)), Pairs).