有这样的事实:
student(ram, cs). // ram is student of cs branch
student(kiri,it).
student(akshay,cs).
student(sanjay,me).
我想编写一条规则来找出任何分支中的同学,并编写一个查询来列出分支中的学生,例如 cs。请帮忙。
如果我必须找到akshay 的同学,我必须运行什么查询?
有这样的事实:
student(ram, cs). // ram is student of cs branch
student(kiri,it).
student(akshay,cs).
student(sanjay,me).
我想编写一条规则来找出任何分支中的同学,并编写一个查询来列出分支中的学生,例如 cs。请帮忙。
如果我必须找到akshay 的同学,我必须运行什么查询?
如果两个学生参加同一门课程,则他们是同学。
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].