2012-03-10 68 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