嵌套的Prolog查询(在不同条件之间)

时间:2018-03-21 21:34:39

标签: prolog

我在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.

你有什么建议的人? 提前谢谢。

1 个答案:

答案 0 :(得分:2)

你必须写:

teacher_of(X,Y):-
    study(X,Z),
    teach(Y,Z).

?- teacher_of(ali, B).
B = hashem
B = mohammad

(您在Z中交换了Yteach/2。要查找所有教师,只需使用findall/3

?- findall(B,teacher_of(ali, B),LB)

LB = [hashem, mohammad]