2016-10-24 3 views
1

Ich habe diesen Code unten gegeben worden:Wie fasst man nur Werte einer Liste in Prolog zusammen?

returnValues(Value):- 
collection(X,Y,Z), 
total([X,Y|Z],Value). 

Dies funktioniert, aber es fasst X, Y und Z. Ich suche es Z nur zusammenzufassen. Z ist eine Liste, und ich möchte die Werte von Z. zusammenzufassen
Insgesamt ist:

total([],0). 

total([Item|List],Sum):- 
salary(Item,A), 
total(List,Rest), 
Sum is B + Rest. 

ich den Code ein paar Mal gezwickt haben, so dass es mir nur Werte von X und Z gibt, und nur Werte von Y und Z, aber ich war nicht in der Lage, nur Werte von Z zu erhalten.

Probeneingang:

questionChildrenIncome(Name,Surname,CombinedIncome):- 
family(Husband,person(Name,Surname,_,_),Children), 
total(Children,CombinedIncome), 
CombinedIncome<100000, 
member(Child,Children), 
salary(Child,Salary), 
Salary<30000. 

Antwort

0

Sie einfach ignorieren könnte X, Y wie:

returnValues(Value):- 
    collection(_,_,Z), 
    total(Z,Value). 

Für Ihre zweite Bemerkung könnten Sie schreiben:

exclude([],[]). 
exclude([H|T],[H|T1]):-salary(H,Salary),Salary<30000,exclude(T,T1). 
exclude([H|T],T1):- salary(H,Salary),Salary>=30000,exclude(T,T1). 

und ändern:

questionChildrenIncome(Name,Surname,CombinedIncome):- 
family(Husband,person(Name,Surname,_,_),Children), 
total(Children,CombinedIncome), 
CombinedIncome<100000, 
exclude(Children,Children) 

. Sie könnten auch einfach schreiben ausschließen Prädikat wie:

exclude([]). 
exclude([H|T]):-salary(H,Salary),Salary<30000,exclude(T). 

die < 30000.

+0

nur, wenn alle Kinder haben Gehalt gelingt ich dachte ich, dass man versucht hatte! Danke, der Code funktioniert jetzt. – Dazzler95

+0

froh zu helfen !!! – coder

+0

Wüssten Sie auch, wie ich die einzelnen Elemente einer Liste mit einer bestimmten Bedingung vergleichen könnte? Ich habe eine Liste, in der einige der Mitglieder die Bedingung erfüllen und andere nicht, aber ich muss alle Mitglieder ausschließen, wenn eine von ihnen die Bedingung nicht erfüllt. Würdest du das programmieren? – Dazzler95

Verwandte Themen