Comment interroger les faits de base de données avec 3 attributs ou plus dans Prolog en utilisant bagof
, setof
. Un exemple j'ai défini une base de données students(name, grade,sport,gender)
. Je veux trouver une liste d'élèves qui pratiquent un sport particulier, par exemple le cricket. Ma requête en coursProlog bagof, setof, findall prédicats
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).
La documentation de 'setof/3' et' bagof/3' indiquent que le premier argument est le terme que vous souhaitez recueillir . Donc dans ce cas, ce serait la variable student * name *. Le deuxième argument devrait être la condition, et le troisième argument est la liste à collecter. Donc: 'setof (N, G^D^étudiants (N, G, cricket, D), L). 'Votre appel' bagof' recueille les sports dans 'L', puis tente d'unifier' S' avec 'cricket'. Aucune collection de noms ne se produit. – lurker
Si vous n'avez aucun problème de redondance dans les résultats des requêtes 'student/4', vous pouvez utiliser' findall (N, étudiants (N, _, cricket, _), L). ' – lurker
Merci pour la réponse mais comment Est-ce que j'exclus les noms des étudiants qui ne pratiquent pas un sport? Quand j'ai essayé cela a renvoyé des étudiants qui n'avaient pas de sport. – user8291645