如何在Prolog中进行查询

时间:2019-02-10 07:22:35

标签: prolog

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) ] ).
family(person( tom, cohen, date(7,may,1960), works( bcd, 15200)),
person( ann, cohen, date(29,may,1961), unemployed),
[person( pat, cohen, date(5,may,1983), works( bcd, 15200)),
person( jim, cohen, date(5,may,1983), works( bcd, 15200)) ] ).
family(person( bob, armstrong, date(12,oct,1977), works( ntnu, 12000)),
person( liz,armstrong, date(6,oct,1975), unemployed),
[person( bob, armstrong, date(6,oct,1999), unemployed),
person( sam,armstrong, date(8,oct,1998), unemployed) ] ).
family(person( tony, oliver, date(7,may,1960), works( bbc, 35200)),
person( anny, oliver, date(9,may,1961), unemployed),
[person( patty, oliver, date(8,may,1984), unemployed),
person( jimey, oliver, date(5,may,1983), unemployed) ] ).
family(person( jack, fox, date(27,may,1940), unemployed),
person( jane, fox, date(9,aug,1941), works( ntu, 13050)),
[person( andy, fox, date(5,aug,1967), works( com, 12000)),
person( kai, fox, date(5,jul,1969), unemployed) ] ).
husband(X) :- family( X, _, _).
wife(X) :- family( _, X, _).
child(X) :- family( _, _, Children), member(X, Children).
exists(Persons) :- husband( Persons); wife( Persons); child( Persons).
dateofbirth(person(_, _, Date, _), Date).
salary(person(_, _, _, works(_, S)), S).
salary(person(_, _, _, unemployed), 0). 

add(X,Y,Total):- Total is X+Y.
sum(X,Total):- foldl(add,X,0,Total).
totalIncome(family(X,Y,C), Income):- family(X,Y,C),maplist(salary,[X,Y|C], L), sum(L,Income).

*编写序言查询以打印每个家庭成员收入低于2000的每个家庭的家庭详细信息。

*编写序言查询以打印每个孩子的总收入比父母多的每个家庭的家庭详细信息。

我尝试对第一个问题执行此操作(但不起作用):totalIncome(Fam,Total),family(X,Y,C),salary(X,Xsalary),Xsalary<2000,salary(Y,Ysalary),Ysalary<2000,salary(C,Csalary),Csalary<2000

不确定第二个问题。另外,为什么我写的查询行不通?

0 个答案:

没有答案