2014-12-22 4 views
2

Я хочу получить сумму окладов детей семьи. Я работаю в Turbo Prolog. Насколько я понимаю, howManyChildrenSalary хорошо работает в Visual Prolog.Сумма зарплат в структуре семьи в Прологе

family (fm("Ivan","Ivanov", dat(1,"may",1980),wor("ingener",0)), 
fm("Anna","Ivanov", dat(15, "january",1945),wor("doctor",1800)), 
[fm("Oleg","Ivanov", dat(22, "march", 1970), wor("student",720)), 
fm("Antin","Ivanov", dat(22, "march", 1970), wor("student",820)), 
fm("Inna", "Ivanov", dat(7, "july", 1975), wor("pupil",100))]).  

howManyChildrenSalary([],0). 
howManyChildrenSalary([fm(_,_,_,wor(_,Salary))|Children],N):-howManyChildren(Children,N1),N=Salary+N1.  

profit (Surname,Average) :- 
family(X,Y,Children), 
X = fm(_,Surname,dat(_,_,Year),wor(_,0)), 
Y = fm(_,Surname,_,wor(_,SalaryMom)), 
Year > 2014-40, 
howManyChildrenSalary(Children,ChildrenSalary), 
howManyChildren(Children,N), 
Average = (SalaryMom+ChildrenSalary)/(N+2). 

Так что в моем случае я получаю ChildrenSalary = + 1 720 + 1 = 722 вместо этого, если ChildrenSalary = 720 + 820 + 100 = 1640. Зачем мне это делать и как это исправить?

Благодарим заранее!

ответ

0

опечатка:

howManyChildrenSalary([fm(_,_,_,wor(_,Salary))|Children],N):- 
    howManyChildrenSalary(Children,N1),N=Salary+N1. 

предполагая

howManyChildren(Children,N) :- length(Children,N).