prolog中的规则和查询帮助
事实如下:prolog中的规则和查询帮助,prolog,Prolog,事实如下: student(ram, cs). // ram is student of cs branch student(kiri,it). student(akshay,cs). student(sanjay,me). 我想写一个规则来找出任何一个分支的同学,并写一个查询来列出一个分支的学生,比如说cs。请帮忙 如果我必须找到akshay的同学,我必须运行什么查询?如果两个学生参加同一课程,他们就是同班同学 同学(X,Y):-学生(X,A),学生(Y,A),X@
student(ram, cs). // ram is student of cs branch
student(kiri,it).
student(akshay,cs).
student(sanjay,me).
我想写一个规则来找出任何一个分支的同学,并写一个查询来列出一个分支的学生,比如说cs。请帮忙
如果我必须找到akshay的同学,我必须运行什么查询?如果两个学生参加同一课程,他们就是同班同学
同学(X,Y):-学生(X,A),学生(Y,A),X@
这是用于抑制重复项的。即只有(A,B)
而没有(B,A)
,(A,A)
和(B,B)
就足够了
要列出一个分支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].
如果我必须找到阿克苏的同学,会有什么疑问…?
同学(阿克苏,X)。
我认为这是错误的。假设我们有一个事实学生(raju,it),那么它会给出[akshay,raju,kiri],但我们可以清楚地看到阿克苏和ram不是raju和kiri的同学。@Hacker688:是的,我想是这样的。。也许我会删除这个答案。。。但是,想想一个同学就是一个有其他人学习同一门课程的人。然后,除了桑杰,所有其他学生都是同学。也许,不是你想要的…:是的,你是对的。但是拉朱和基里学习的课程与阿克谢和拉姆不同。因此,我们不能成为他们的同学。因为我们假设他们是学习相同课程的同学,所以我建议试着理解图书馆(聚合)。试着玩量化游戏,那些变量^
?- classmates(L).
L = [akshay, ram].