我是prolog世界的新手,我目前在学校项目中遇到了一个问题。 我有事实:
family (
person(_,_,_,_), %father
person(_,_,_,_), %mother
[]). %array with children
前三个字段是name,surname和date_of_birth,第四个字段可以是:unemployed
,benefit
,employed(Name_of_company, Salary)
。我也有谓词:
exists(Person) % I think that implementation is irrelevant, means that person is in DB
salary(person(_,_,_,unemployed),0).
salary(person(_,_,_,benefit,500).
salary(person(_,_,_,employed(_,S)),S).
这是作为锻炼的一部分给出的所有事实和谓词。我想提取一份所有人的工资清单。 我尝试过这样的事情:
findall(X,salary(_,X),L). % it doesn't search people and returns fixed 3 values
exists(Y),
findall(X,salary(Y,X),L). %however it returns value for each person instead of combined list
我完全没有想法如何做到这一点。任何人都可以帮助我吗?
答案 0 :(得分:0)
exists(Y),
findall(X,salary(Y,X),L).
%however it returns value for each person
%instead of combined list
它也应该。如果你想要组合列表(我假设,数据库中所有人的人员 - 工资列表),你应该创建一个命名规则来查找一个人的工资,并使用 it 和findall
但另一方面,为什么在上面的查询中有findall
?就好像你期望一个人的几个薪水。肯定肯定只有一个。在这种情况下,查询应该只是
findall( Y-X, ( exists(Y), salary(Y,X) ), L).