你来这里有点类型混合。最快的解决方法是从这里Cartesian prod获取笛卡尔积,然后连接结果列表。
list_List_CartProd(L1,L2,L3):-
cartProd(L1,L2,L3,L1).
cartProd(_, [], [], _).
cartProd([], [_|T2], L3, L4):-
cartProd(L4, T2, L3, L4).
cartProd([H1|T1], [H2|T2], [[H1,H2]|T3], L4):-
cartProd(T1, [H2|T2], T3, L4).
list_concatEl([],[]).
list_concatEl([X|Xs],[Y|Ys]) :-
X=[X1,X2],
string_concat(X1,X2,Y),
list_concatEl(Xs,Ys).
product_c(L1,L2,L4) :-
list_List_CartProd(L1,L2,L3),
list_concatEl(L3,L4).
如果我们现在用您的案例进行测试,我们会得到:
?- product_c(["A","B"],["C","D"],What).
What = ["AC", "BC", "AD", "BD"] ;
false.
?- product_c(["A"],[],What).
What = [] ;
false.