2016-11-24 6 views
1

私はルールを作成しています。一定量の下やプロローグ内の有向グラフ

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). 

ルールにお金を借りて示しowes money graph 私が作成したルールは、しかし、私はルールを記述する必要があります知っています人がどれくらいのお金を借りているかを示しています。例えば、aliceの場合は25、bobの場合は10が表示されます。

答えて

1

すべての借方のリストを得るためにfindall/3を使用し、値の合計を得るために簡単なsumList/2を使用することを提案します。 totOwes(alice, S)を呼び出す例により、

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). 

、私はS25で統一されていることを取得します。 bob10charlie0です。

+0

ありがとう –

関連する問題