2015-10-13 51 views
1

我给出了3个列表。前两个列表的元素数量相加,并与第三个列表compare(List1,List2,List3)进行比较。检查前两个列表的总和以查看元素的总数是否小于或等于第三个列表中元素的数量。这是我目前拥有的。我遇到Total is Total+1错误。序言:两个列表的元素总和与第三个列表中的元素相比

lessThanEq(List1, List2, List3) :- 
    T1 is 0, 
    T2 is 0, 
    T3 is 0, 
    addUp(List1, T1), 
    addUp(List2, T2), 
    addUp(List3, T3), 
    T1 is T1+T2, 
    T1 =< T3. 

addUp([Head|Tail], Total) :- 
    addUp(Tail, Total1), 
    Total is Total1+1. 

这是我到目前为止。

+1

你不能重新分配谓词子句中的变量值。所以'T1是T1 + T2'将总是失败('T1'本身不能加上'T2'的值),除非'T2'的值恰好为零。 – lurker

回答

0

你在你的程序的一些错误:

第一:
的Tx变量 删除实例化零T1 is 0, T2 is 0, T3 is 0,你并不需要初始化这个变量,也是你不应该实例相同的变量超过同一规则中的一个条件。结果可能不是预期的。

二:
使用不同的变量来实例化T1和T2的总和,T4 is T1 + t2, T4 =< T3

最后,你的谓语addUp/2需要的基本情况,为空列表

addUp([],0). 

而更换变量Head的最后一个数字1。您应该将列表的第一个元素添加到尾部的总和中。

addUp([Head | Tail], Total) :- 
addUp(Tail, Total1), Total is Total1 + Head. 

最终方案:

lessThanEq(List1, List2, List3) :- 
    addUp(List1,T1),addUp(List2, T2), addUp(List3, T3), 
    T4 is T1 + T2, T4 =< T3. 

addUp([],0). 
addUp([Head | Tail], Total) :- 
    addUp(Tail, Total1), Total is Total1 + Head. 
相关问题