有以下事实:
student(ram, cs). // ram is student of cs branch
student(kiri,it).
student(akshay,cs).
student(sanjay,me).
我想编写一条规则来查找任何分支中的同学和查询以列出分支中的学生说cs。请帮忙。
如果我必须找到akshay的同学,我必须运行什么查询?
答案 0 :(得分: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.
答案 1 :(得分:0)
这是对this previous问题的跟进,让我们保持同样的心情......
classmates(Classmates) :-
aggregate(set(P), B^Q^(student(P,B), student(Q,B), P\=Q), Classmates).
产量
?- classmates(L).
L = [akshay, ram].