【问题标题】:Counting variables during recursion在递归期间计算变量
【发布时间】:2016-11-23 14:54:30
【问题描述】:

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

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

提前致谢!

【问题讨论】:

  • 以下之一:不要使用尾递归;使用蓄电池;使用 clp(fd) 作为计数器。 Stackoverflow 上有大量所有三种方法的示例。
  • 我不知道怎么用,你能在我的代码中实现吗?谢谢!
  • 不行,你应该先自己看,尝试编码,有问题再问。

标签: prolog instantiation-error


【解决方案1】:

你很亲密。问题是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.

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-03-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-16
    • 1970-01-01
    • 2012-12-12
    • 1970-01-01
    相关资源
    最近更新 更多