0

如何在 Prolog 中使用bagof,查询具有 3 个或更多属性setof的数据库事实 一个例子我定义了一个数据库students(name, grade,sport,gender)。我想找到参加特定运动的学生名单,比如板球。我当前的查询

sport_list(L):- 
        bagof(S,N^G^D^students(N,G,S,D),L),
           S = cricket.

student(patash,5,rugby,male).
student(naomi,3,netball,female).
student(lepo,6,_,male).
student(diamal,4,cricket,male).
student(bonga,5,chess,female).
student(imi,6,cricket,male).
student(ayanda,3,_,female).
4

1 回答 1

1

您可以为您的知识库建模,以便第三个论点none适用于不运动的学生,而不是_

student(lepo,6,none,male).
student(ayanda,3,none,female).

然后,您可以定义一个谓词,将有运动能力的学生描述为没有运动能力的学生none

athletic(S) :-
   dif(X,none),
   student(S,_,X,_).

随后在 sport_list/1 的单一目标中使用 sports/1:

sport_list(L):- 
   bagof(S,athletic(S),L).

这会产生预期的结果:

   ?- sport_list(L).
L = [patash,naomi,diamal,bonga,imi]
于 2017-07-11T20:17:27.567 回答