Пролог: поиск всех решений
Название может выглядеть так, будто это десятка, но это не так. Цель этой программы - взять эти классы (потребности)
needs([[ece2090,1,m,13,16],
[ece3520,1,tu,11,14],
[ece4420,1,w,13,16]].
и соедините их с ассистентами колледжа, у которых есть полномочия для преподавания в классе, и которые также бесплатны в течение этого времени (ресурсы; значение для дня, начала и окончания для ТА означает, что он в данный момент недоступен).
resources([[joel, [ece2090,ece2010,ece3520,ece4420],[[m,13,16]]],
[sam, [ece2090,ece4420],[]],
[pete, [ece3520],[[w,13,16]]]].
В этой версии каждый ТА может принять только один класс. Я создал программу для этого, и решение ниже.
A = [[ece2090, 1, 'NONE'], [ece3520, 1, joel], [ece4420, 1, sam]] .
Это пары ТА для курсов. Как видите, один помечен как «нет». Однако, если вы посмотрите, вы увидите действительную конфигурацию, которая назначает все древовидные TA (Пит для ECE3520, Сэм для ECE2090 и Джоэл для ECE4420). Для целей следующего вопроса оба из них будут считаться решениями.
Как отобразить все решения? Findall, как правило, был бы подходящим вариантом, и наличие неизбежного условия сбоя также помогло бы, но вот главный момент: для пролога потребности и ресурсы - это только один экземпляр переменной вместо трех, потому что они являются матрицами. По этой причине прологу ничего не нужно отслеживать, если я заставлю его вернуться с помощью условия сбоя или findall
Так есть ли способ найти все решения? Можно ли как-нибудь взять все возможные варианты размещения матрицы и выбросить их все в программу?