Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/google-app-engine/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Prolog 递归过程中的变量计数_Prolog_Instantiation Error - Fatal编程技术网

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的三种方法的例子。我不知道如何使用,你能在我的代码中实现吗?谢谢不,您应该首先自己查看,尝试编写代码,并询问是否有问题。