2016-11-24 6 views
1

Ich habe ein Diagramm, das ich Regeln erstellen. owes money graph Ich habe Regeln geschaffen, die zu Geld schuldet zeigt dieGerichtete Graphen in Prolog

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

Ich habe erstellt Regeln, die angezeigt werden, die jemand unter einem bestimmten Betrag oder über

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

jedoch wissen, schuldet eine Regel, die ich schreiben muss Das zeigt an, wie viel Geld eine Person insgesamt schuldet, also sollte sie beispielsweise 25 für alice und 10 für bob anzeigen.

Antwort

1

Ich schlage die Verwendung von findall/3, um eine Liste aller Schulden und eine einfache sumList/2, um die Summe der Werte zu erhalten.

von Beispiel

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) aufrufen, bekomme ich, dass S mit 25 einheitlichen ist; für bob mit 10 und für charlie mit 0.

+0

danke sehr hilfreich –

Verwandte Themen