在递归期间计算变量

Counting variables during recursion

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

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).

该程序适用于两个相同的列表,但它不计算列表之间的差异,例如 "difference([1,2,3],[1,2,4],N)" 给我错误 "Arguments are not sufficiently instantiated"。如何解决这个问题?

提前致谢!

你们很亲近。问题是这一行 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.