Пролог добавить определенные элементы в список - PullRequest
0 голосов
/ 28 сентября 2019

Я не могу понять, почему мой код не работает, несмотря на просмотр ответов на похожие вопросы.Я слишком новичок в Прологе, чтобы правильно называть вещи, но я надеюсь, что вы понимаете, к чему я стремлюсь.

Я определяю расписание примерно на основе этой программы и пытаюсь получить списокиз классов, которые Майк преподает для данного результата (Следующим шагом будет объявить, что должны возвращаться только результаты, в которых Майк и Фил учат 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).')
...