0
bagof
,setof
を使用して、Prologで3つ以上の属性を持つデータベースファクトをクエリする方法を教えてください。一例として、定義されたデータベースstudents(name, grade,sport,gender)
があります。私は特定のスポーツをする学生のリスト、クリケットを見つけたいと思います。そして、あなたはそれらのものとしてatheletic学生を記述する述語を定義することができProlog bagof、setof、findall述語
student(lepo,6,none,male).
student(ayanda,3,none,female).
:私の現在のクエリ
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).
'SETOF/3'と' bagof/3'最初の引数は、あなたが収集したい用語であることを示すためのドキュメント:望ましい結果が得られ
:sport_list/1の。この場合、それはstudent * name *変数になります。 2番目の引数は条件でなければならず、3番目の引数は収集するリストです。あなたの 'bagof'コールはスポーツを' L'に集め、 'S'と' cricket'を統一しようとします。名前の集まりはありません。 – lurker
'student/4'クエリの結果に冗長性の問題がない場合は、' findall(N、students(N、_、cricket、_)、L) 'を使用することができます。 – lurker
スポーツをしていない生徒の名前は除外しますか?私はそれを試みたときに、スポーツを持たない学生を返しました。 – user8291645