Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
prolog中的规则和查询帮助_Prolog - Fatal编程技术网

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].