如何从序列中的两个列表创建一个原子对列表?
问题描述:
我是新的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.
我希望所有在一行中不重复..
答
可以通过在L2列出所有对甲在L1和B做一个收集所有对{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}].
答
你应该向Prolog解释你wa nt(什么是一对,如何构建它),然后要求Prolog找到所有的对。