使用多个子句-Prolog

使用多个子句-Prolog,prolog,Prolog,我有一个prolog程序,其中包含课程模块、学生以及他们正在参加的模块的详细信息。计划如下: module(42, mod_details('Vocal Skills', 'Dawn Upshaw')). module(53, mod_details('Physics', 'Dave Jones')). module(64, mod_details('Maths', 'John Richards')). module(75, mod_details('History', 'El Capitan'

我有一个prolog程序,其中包含课程模块、学生以及他们正在参加的模块的详细信息。计划如下:

module(42, mod_details('Vocal Skills', 'Dawn Upshaw')).
module(53, mod_details('Physics', 'Dave Jones')).
module(64, mod_details('Maths', 'John Richards')).
module(75, mod_details('History', 'El Capitan')).

student('Bruce Wayne', student_det('100', '2')).
student('Clarke Kent', student_det('200', '3')).
student('Scott Summers', student_det('300', '1')).
student('Richard Kimble', student_det('400', '2')).

attends(100, 42).
attends(300, 42).
attends(400, 42).
attends(200, 53).
attends(300, 53).
attends(300, 64).
attends(100, 75).
attends(200, 75).
attends(300, 75).
attends(400, 75).

print_studentnos_for_modno(ModNo):-
        attends(SNo, ModNo),
    write(SNo).

print_studentnos_for_modtitle(ModTitle):-
    module(ModNo, mod_details(ModTitle, Lect)),
    attends(SNo, ModNo),
    write(SNo).

is_a_student(StudentName):-
    student(StudentName, student_det(SNo, Year)).

print_students_lectured_by(Lect):-
    module(ModNo, mod_details(ModTitle, Lect)),
    attends(SNo, ModNo),
    student(StudentName, student_det(SNo, Year)),   
    write(StudentName), write(' '),
    write(SNo).
最后一个子句,print_students_received_by(Lect),应该打印出学生的姓名,后跟学生号。然而,它只给出了一个错误的答案

我对这一点非常陌生,因此,如果您能就如何修改我的条款提供任何建议,我将不胜感激

非常感谢 安迪

应该是

student('Bruce Wayne', student_det(100, 2))
其他学生也是如此

注意:我自己还没有试过

student('Bruce Wayne', student_det(100, 2))