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定义问题.
这个问题对我来说似乎没有多大意义,但让我们试试看:
我的第一个观察是所有三个列表的长度相同.这有效地你在这里有一个像元素一样的映射:
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)