我想创建一个程序,它应该确定两个长度相等的列表之间的差异,并给出变量中差异的数量。到目前为止我的代码是:
difference([],[],0).
difference(L1,L2,N) :-
L1=[H1|T1],
L2=[H2|T2],
H1=H2,
difference(T1,T2,N).
difference(L1,L2,N) :-
L1=[H1|T1],
L2=[H2|T2],
H1\=H2,
NZ is N + 1,
difference(T1,T2,NZ).
该程序适用于两个相同的列表,但它并不计算列表之间的差异,例如"差异([1,2,3],[1,2,4],N )"给我错误"参数没有充分实例化"。如何解决这个问题?
提前致谢!
答案 0 :(得分:3)
你非常接近。问题是此行NZ is N + 1
尚未实例化N
,NZ
无法等待N
实例化。
解决方案是获取NZ,然后添加1
。
difference([],[],0).
difference(L1,L2,N) :-
L1=[H1|T1],
L2=[H2|T2],
H1=H2,
difference(T1,T2,N).
difference(L1,L2,N) :-
L1=[H1|T1],
L2=[H2|T2],
H1\=H2,
difference(T1,T2,NZ),
N is NZ + 1.