在递归期间计算变量

时间:2016-11-23 14:54:31

标签: prolog instantiation-error

我想创建一个程序,它应该确定两个长度相等的列表之间的差异,并给出变量中差异的数量。到目前为止我的代码是:

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 )"给我错误"参数没有充分实例化"。如何解决这个问题?

提前致谢!

1 个答案:

答案 0 :(得分:3)

你非常接近。问题是此行NZ is N + 1尚未实例化NNZ无法等待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.