0

次のような事実があります。

student(ram, cs). // ram is student of cs branch

student(kiri,it).

student(akshay,cs).

student(sanjay,me).

ブランチ内のクラスメートを見つけるルールと、ブランチ内の学生を一覧表示するクエリを書きたいと思います。助けてください。

akshay のクラスメートを見つける必要がある場合、どのクエリを実行する必要がありましたか?

4

2 に答える 2

2

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.
于 2013-11-03T09:12:13.620 に答える
0

これはこの前の質問のフォローアップです。同じ気分を保ちましょう...

classmates(Classmates) :-
  aggregate(set(P), B^Q^(student(P,B), student(Q,B), P\=Q), Classmates).

収量

?- classmates(L).
L = [akshay, ram].
于 2013-11-03T13:37:48.237 に答える