如何只总结Prolog中列表的值?

时间:2016-10-24 18:27:54

标签: list prolog sum

我已经获得以下代码:

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

这确实有效,但它总结了X,Y和Z.我正在寻找它来总结Z 。 Z是一个列表,我想总结Z的值 总计是:

total([],0).   

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

我已经调整了几次代码,因此它只给出了X和Z的值,只有Y和Z的值,但我还没有能够得到Z的值。

示例输入:

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

1 个答案:

答案 0 :(得分:0)

你可以忽略X,Y像:

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

您可以写下第二条评论:

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

并改为:

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

。 您还可以编写更简单的排除谓词,如:

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

只有当所有孩子都有薪水<30000时才会成功。