Как написать пролог запрос, который рассчитывает общую зарплату и меньше, чем значение? - PullRequest
1 голос
/ 11 октября 2019
family(person( john, cohen, date(17,may,1990), unemployed), person( lily, cohen, date(9,may,1990), unemployed),[ ] ).
family(person( john, armstrong, date(7,may,1988), unemployed), person( lily, armstrong, date(29,may,1961), unemployed), [ ] ).
family(person( eric, baily, date(7,may,1963), works( bbc, 2200)), person( grace, baily, date(9,may,1965), works( ntu, 1000)), [person( louie, baily, date(25,may,1983), unemployed) ] ).
family(person( eric, baily, date(7,may,1963), works( acc, 21200)), person( grace, baily, date(9,may,1965), works( ntnu, 12000)), [person( louie, baily, date(25,may,1983), unemployed) ] ).
family(person( eric, fox, date(27,may,1970), works( bbc, 25200)), person( grace, fox, date(9,may,1971), works( ntbu, 13000)), [person( louie, fox, date(5,may,1993), unemployed) ] ).

husband(X) :- family(X, _, _).
wife(X) :- family(_, X, _).
child(X) :- family(_, _, Children), member(X, Children).

salary(person(_, _, _, works(_, S)), S).
salary(person(_, _, _, unemployed), 0).

A.Введите правило пролога totalIncome / 2, чтобы вычислить общий доход семьи. Б. Напишите пролог-запрос, чтобы напечатать общий доход каждой семьи. C. Напишите пролог-запрос, чтобы напечатать сведения о семье каждой семьи, у которой доход на одного члена семьи меньше 2000. D. Напишите пролог-запрос, чтобы напечатать сведения о семье каждой семьи, где общий доход детей превышает их родителей.

для частей A и B:

totalFamilyIncom(X,Y,Sum):- Sum is X+Y.

sum(Sumx,Sum):- foldl(totalFamilyIncom,Sumx,0,Sum).

totalIncome(family(X,Y,T), Income):- 
                      family(X,Y,T),
                      maplist(salary,[X,Y|T], L), 
                      sum(L,Income).
/* ? totalIncome(Family,TotalIncome).*/

, но в части C и D это False ???

totalx([],0).
totalx([Person|L],Sum):-
    salary(Person,S),
    totalx(L,Rest),
    Sum is S+Rest.

total_income(family(husband,wife,child),I):-
        totalx([husband,wife|child],I).
total_income(family(husband,wife,child),I):-
      I<2000.

Может кто-нибудь объяснить мне, почему это не работает? ??

1 Ответ

0 голосов
/ 11 октября 2019

Я думаю, что ваша ошибка - может быть, просто опечатка - она ​​здесь

[husband,wife|child]

Это неправильный список (хвост должен быть списком, но у нас есть атом), затем totalx / 2потерпит неудачу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...