prolog中的定向图

时间:2016-11-24 14:26:06

标签: prolog

我有一个图表,我正在创建规则。 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。

1 个答案:

答案 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),我认为S25统一;适用于bob的{​​{1}}和10的{​​{1}}。