2012-03-10 73 views
0

我有一个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')). 

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_lectured_by(LECT),应该是打印出来的学生,然后他们的学生数的名称。但是,它只是给出了一个错误的答案。

我对此非常感兴趣,所以希望对如何修改我的条款有任何建议。

非常感谢 安迪

回答

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

应该

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

同样地,对于学生的休息。

注意:还没有试过这个我自己

+0

谢谢!它总是让我失望的错误! – user1261259 2012-03-10 19:15:20