次のような事実があります。
student(ram, cs). // ram is student of cs branch
student(kiri,it).
student(akshay,cs).
student(sanjay,me).
ブランチ内のクラスメートを見つけるルールと、ブランチ内の学生を一覧表示するクエリを書きたいと思います。助けてください。
akshay のクラスメートを見つける必要がある場合、どのクエリを実行する必要がありましたか?
次のような事実があります。
student(ram, cs). // ram is student of cs branch
student(kiri,it).
student(akshay,cs).
student(sanjay,me).
ブランチ内のクラスメートを見つけるルールと、ブランチ内の学生を一覧表示するクエリを書きたいと思います。助けてください。
akshay のクラスメートを見つける必要がある場合、どのクエリを実行する必要がありましたか?
2 人の学生が同じコースに参加している場合、2 人の学生はクラスメートです。
classmates(X, Y) :- student(X, A), student(Y, A), X @< Y.
@</2
これは重複を抑制するためのものです。つまり、 、 、および(A,B)
なしで十分です。(B,A)
(A,A)
(B,B)
?- classmates(X, Y).
X = akshay,
Y = ram ;
false.
ブランチ内のすべての学生を一覧表示するにはcs
:
?- student(X, cs).
X = ram ;
X = akshay.
これはこの前の質問のフォローアップです。同じ気分を保ちましょう...
classmates(Classmates) :-
aggregate(set(P), B^Q^(student(P,B), student(Q,B), P\=Q), Classmates).
収量
?- classmates(L).
L = [akshay, ram].