我想知道你是否可以在这个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]]]
他们是以下(暂定)形式:
is_plist([]).
is_plist([EL|ELs]) :-
is_el(EL),
is_plist(ELs).
is_el(_Name=_Value).
is_el(L) :-
is_plist(L).
所以,我想根据等号之后的值来比较它们,因为我有类似的值,如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).