2016-11-24 31 views
1

我有一個圖表,我正在創建規則。然而owes money graph 誰欠的錢可顯示誰在一定量以上序言中的導向圖

owesOver10(X,Y) :-owes(X,Y,Z),(Y>=10). 
owesUnder10(X,Y) :-owes(X,Y,Z),(Y<10). 

欠了別人誰

owes(alice,5,charlie). 
owes(alice,20,bob). 
owes(bob,10,charlie). 

我已經創建的規則,我創建的規則,顯示知道我需要編寫一個規則顯示一個人總共欠了多少錢,例如它應該顯示25爲alice,而10爲bob

回答

1

我建議使用findall/3來獲得所有欠款的清單,並使用簡單的sumList/2來獲得這些值的總和。

例如

listSum([], 0). 
listSum([H | T], S0) :- 
    listSum(T, S1), 
    S0 is S1 + H. 

totOwes(X, S) :- 
    findall(Y, owes(X, Y, _), L), 
    listSum(L, S). 

調用totOwes(alice, S),我得到S統一與25;對於bob10和對於charlie0

+0

非常感謝您的幫助 –