Prolog结合了两个列表

Joh*_*Dow 2 list prolog nested-lists

例如,我有A = [a,b,c,d]B = [[q,w,e],[r,t],[y,u],[i,o]]我想创建对,C = [[a,[q,w,e]],[b,[r,t]],[c,[y,u]],[d,[i,o]]]. 我可以创建对列表,但我不想将每个人彼此组合.有一个简单的方法吗?我无法正确地向Google定义问题.

fal*_*lse 5

这个问题对我来说似乎没有多大意义,但让我们试试看:

我的第一个观察是所有三个列表的长度相同.这有效地你在这里有一个像元素一样的映射:

a_b_c(A,B,[A,B]).
Run Code Online (Sandbox Code Playgroud)

现在使用maplist/4:

?- As = [a,b,c,d], Bs = [[q,w,e],[r,t],[y,u],[i,o]], maplist(a_b_c, As, Bs, Cs).
As = [a,b,c,d],
Bs = [[q,w,e],[r,t],[y,u],[i,o]],
Cs = [[a,[q,w,e]],[b,[r,t]],[c,[y,u]],[d,[i,o]]].
Run Code Online (Sandbox Code Playgroud)

但是,我敢说,我真的会考虑配对!我无法看到上述任何表述中的任何优点.

key_value_pair(K,V,K-V).

?-  As = [a,b,c,d], Bs = [[q,w,e],[r,t],[y,u],[i,o]], maplist(a_b_c, As, Bs, Cs).
As = [a,b,c,d],
Bs = [[q,w,e],[r,t],[y,u],[i,o]],
Cs = [a-[q,w,e],b-[r,t],c-[y,u],d-[i,o]].
Run Code Online (Sandbox Code Playgroud)

maplist/4是一个常见的预定义或库谓词.另见这篇文章.如果你没有它:

maplist(_C_3, [], [], []).
maplist(Cont_3, [A|As], [B|Bs], [C|Cs]) :-
   call(Cont_3, A, B, C),
   maplist(Cont_3, As, Bs, Cs).
Run Code Online (Sandbox Code Playgroud)