Prolog 递归过程中的变量计数
我想创建一个程序,它应该确定两个长度相等的列表之间的差异,并给出一个变量中的差异数。到目前为止,我的代码是:Prolog 递归过程中的变量计数,prolog,instantiation-error,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
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).
该程序适用于两个相同的列表,但它不计算to列表之间的差异,例如,“difference([1,2,3],[1,2,4],N)”给我的错误是“参数没有充分实例化”。如何解决这个问题
提前谢谢 你们非常接近。问题是这行
NZ是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.
以下任一项:不要使用尾部递归;使用蓄能器;使用clp(fd)作为计数器。这里有很多关于Stackoverflow的三种方法的例子。我不知道如何使用,你能在我的代码中实现吗?谢谢不,您应该首先自己查看,尝试编写代码,并询问是否有问题。