2015-10-13 47 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. 
相關問題