Prolog 比较列表项

Prolog 比较列表项,prolog,Prolog,我想知道您是否可以在这个Prolog程序中帮助我,该程序应该比较两个列表的项目并将它们映射: 例如,我得到了以下两个列表: A= [t1=v,[t2=w,[d3=a]],[d2=m,[d3=a]]] B= [t11=v,t12=p,[t10=o,[t3=a,t22=w]],[t20=p,[t3=a,t22=m]]] 其形式如下(暂定): 所以,我想根据等号后面的值来比较它们,因为我得到了类似的值,比如v,a,m,等等,所以输出类似 t1 = v -> t11=v [t2=w,[d3=

我想知道您是否可以在这个Prolog程序中帮助我,该程序应该比较两个列表的项目并将它们映射: 例如,我得到了以下两个列表:

A= [t1=v,[t2=w,[d3=a]],[d2=m,[d3=a]]]
B= [t11=v,t12=p,[t10=o,[t3=a,t22=w]],[t20=p,[t3=a,t22=m]]]
其形式如下(暂定):

所以,我想根据等号后面的值来比较它们,因为我得到了类似的值,比如v,a,m,等等,所以输出类似

t1 = v  ->  t11=v
[t2=w,[d3=a]]  ->  [t10=o,[t3=a,t22=w]]
[d2=m,[d3=a]]  ->  [t20=p,[t3=a,t22=m]]
这是因为两个列表的前两项都得到了(v)。第二个列表中的第二项具有不同的值,因此应忽略它。第一个列表中的第二项将映射到列表B中的第三项,因为它们都有w和a,等等

我试着把问题分成几个子问题,得到了获取列表成员和收集等号后的文本的规则,但还是停留在比较部分。有人能帮我吗

%getting lists members:
m(X,[X|_]).
m(X,[_|R]) :- m(X,R).

%Collecting text rules:
c([], L, L).
c([H | T], L0, L2) :-
  !,
  c(H, L0, L1),
  c(T, L1, L2).

c(_=C, L, [C | L]).
c(T, C) :-
  c(T, [], C).

给第二个谓词命名
([],L,L)
等将使程序更接近语法正确性。它是一个嵌套列表,其中一些项是列表。我不想把它们弄平。@ally:在你的问题中给你的术语下一个清晰的定义。我添加了一个建议,可能可以,也可能不可以。但是,只要你不清楚这一点,其他部分就变得更加模糊。
%getting lists members:
m(X,[X|_]).
m(X,[_|R]) :- m(X,R).

%Collecting text rules:
c([], L, L).
c([H | T], L0, L2) :-
  !,
  c(H, L0, L1),
  c(T, L1, L2).

c(_=C, L, [C | L]).
c(T, C) :-
  c(T, [], C).