Я не могу понять, почему мой код не работает, несмотря на просмотр ответов на похожие вопросы.Я слишком новичок в Прологе, чтобы правильно называть вещи, но я надеюсь, что вы понимаете, к чему я стремлюсь.
Я определяю расписание примерно на основе этой программы и пытаюсь получить списокиз классов, которые Майк преподает для данного результата (Следующим шагом будет объявить, что должны возвращаться только результаты, в которых Майк и Фил учат 2, но я хочу проработать это, чтобы я мог видеть и понимать, что происходит).
Я полагаю, это должно быть просто, но любые комбинации предиката addToList(List,C)
никогда не работают.Я знаю, что есть предикат добавления, но я слышал, что он неэффективен, и хотел бы изучить «сырой» путь.Я не знаю, сколько вариантов я пробовал и не могу понять, как работает Пролог в этом отношении, и не знаю, на каком уровне я ошибаюсь - все это немного загадка черного ящикаработая с ним.
var program =
:- use_module(library(lists)).
prefers(may,a).
prefers(may,b).
prefers(may,c).
prefers(may,d).
prefers(bob,a).
prefers(bob,b).
prefers(bob,c).
prefers(pete,a).
prefers(pete,b).
prefers(pete,c).
prefers(pete,d).
prefers(tom,a).
prefers(tom,b).
prefers(tom,c).
prefers(tom,d).
teacher_pref(mike,a).
teacher_pref(mike,b).
teacher_pref(mike,c).
teacher_pref(phil,b).
teacher_pref(phil,c).
teacher_pref(phil,d).
addToList([C|List],C):- addToList(List,C).
timetable([a,[C1,S1,T1],b,[C2,S2,T2],c,[C3,S3,T3],d,[C4,S4,T4]],List1):-
teacher_pref(T1,C1),
teacher_pref(T2,C2),
teacher_pref(T3,C3),
teacher_pref(T4,C4),
prefers(S1,C1),
prefers(S2,C2),
S1\\=S2,
prefers(S3,C3),
S1\\=S3,
S2\\=S3,
prefers(S4,C4),
S1\\=S4,
S2\\=S4,
S3\\=S4,
addToList(List1,C):-
teacher_pref(mike,C).
session.consult( program );
session.query('timetable([C1,[a,S1,T1],C2,[b,S2,T2],C3,[c,S3,T3,L3],C4,[d,S4,T4]],List1).')