0

有这样的事实:

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

student(kiri,it).

student(akshay,cs).

student(sanjay,me).

我想编写一条规则来找出任何分支中的同学,并编写一个查询来列出分支中的学生,例如 cs。请帮忙。

如果我必须找到akshay 的同学,我必须运行什么查询?

4

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 回答