我有一个图表,我正在创建规则。 owes money graph 我创建的规则显示了谁欠谁
owes(alice,5,charlie).
owes(alice,20,bob).
owes(bob,10,charlie).
我创建的规则显示谁欠某人或超过某人
owesOver10(X,Y) :-owes(X,Y,Z),(Y>=10).
owesUnder10(X,Y) :-owes(X,Y,Z),(Y<10).
然而我知道我需要编写一个规则来显示一个人总共欠多少钱,例如它应该显示alice
25,而bob
显示10。
答案 0 :(得分: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
统一;适用于bob
的{{1}}和10
的{{1}}。