Prolog 查找所有值

Prolog 查找所有值,prolog,Prolog,我是prolog领域的新手,目前在学校项目中有一个问题困扰着我。 我有事实: family ( person(_,_,_,_), %father person(_,_,_,_), %mother []). %array with children 前三个字段是姓名、姓氏和出生日期,第四个字段可以是:失业,福利,就业(公司名称、工资)。我还有谓词: exists(Person) % I think that implementation is irrelevant, me

我是prolog领域的新手,目前在学校项目中有一个问题困扰着我。 我有事实:

family (
    person(_,_,_,_), %father
    person(_,_,_,_), %mother
    []). %array with children
前三个字段是姓名、姓氏和出生日期,第四个字段可以是:
失业
福利
就业(公司名称、工资)
。我还有谓词:

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
我完全不知道怎么做。有人能帮我吗

exists(Y),
findall(X,salary(Y,X),L). 
  %however it returns value for each person 
  %instead of combined list
也应该如此。如果您想要合并列表(我假设,数据库中所有人员的人员薪资列表),您应该创建一个命名规则来查找人员的薪资,并将其与
findall
一起使用

但另一方面,为什么在上面的查询中有
findall
?这就好像你期望一个人有几份薪水。肯定只有一个。在这种情况下,查询应该是

findall( Y-X, ( exists(Y), salary(Y,X) ), L).

对不起,粘贴错误的行。我的第一次尝试是这一次,但它返回的是fixe 0,500,类似于“你的“数据库”的形状错误:person/4应该找到一个唯一的键,salary/2应该引用这样的键…@novy1234是正确的:实际上,可能有几个人的名字和出生日期相同!好的,谢谢。这本书不是我写的,不过我会记得的。你写的东西很有帮助,但它不是答案,只是一个提示,所以我用答案编辑了它