我在Prolog中正在处理有关此代码的一些问题:
student(ali).
student(sami).
student(rami).
student(mousa).
student(muna).
student(amal).
student(omar).
course(ai).
course(java).
course(calculus2).
course(calculus1).
course(robots).
teacher(hashem).
teacher(mohammad).
teacher(ibrahim).
teacher(kareem).
prerequest(ai,java).
prerequest(calculus2,calculus1).
prerequest(robots,ai).
study(ali,ai).
study(ali,java).
study(sami,java).
study(rami,calculus2).
study(mousa,ai).
study(muna,java).
study(amal,calculus1).
study(omar,robots).
teach(hashem,ai).
teach(mohammad,java).
teach(ibrahim,calculus2).
teach(ibrahim,calculus1).
teach(kareem,robots).
teacher_of(X, Y):-
study(X, Z),
teach(Z, Y).
现在,我想找到学生“阿里”的所有老师? 我之前尝试过这个:
?- teacher_of(ali, B).
但是它给了我一个错误,并在邮件末尾给出了一个 false 字(作为答案)。
注意我使用此在线编辑器:here.
你有什么建议的人? 提前谢谢。
答案 0 :(得分:2)
你必须写:
teacher_of(X,Y):-
study(X,Z),
teach(Y,Z).
?- teacher_of(ali, B).
B = hashem
B = mohammad
(您在Z
中交换了Y
和teach/2
。要查找所有教师,只需使用findall/3
:
?- findall(B,teacher_of(ali, B),LB)
LB = [hashem, mohammad]