寻找所有价值观

时间:2015-04-18 10:33:00

标签: prolog

我是prolog世界的新手,我目前在学校项目中遇到了一个问题。 我有事实:

family (
    person(_,_,_,_), %father
    person(_,_,_,_), %mother
    []). %array with children

前三个字段是name,surname和date_of_birth,第四个字段可以是:unemployedbenefitemployed(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

我完全没有想法如何做到这一点。任何人都可以帮助我吗?

1 个答案:

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