在递归期间计算变量
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.
我想创建一个程序,它应该确定两个等长列表之间的差异,并给出一个变量的差异数。到目前为止我的代码是:
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.