Prolog: Alle Lösungen finden

Der Titel sieht vielleicht wie ein Dutzend Cent aus, ist es aber nicht. Das Ziel dieses Programms ist es, diese Klassen (Bedürfnisse)

needs([[ece2090,1,m,13,16],
[ece3520,1,tu,11,14],
[ece4420,1,w,13,16]].

und verbinden Sie sie mit Hochschullehrern, die die Berechtigung haben, die Klasse zu unterrichten, und die auch während dieser Zeit frei sind (Ressourcen; der Wert für Tag, Start und Stopp für den TA bedeutet, dass er zu diesem Zeitpunkt nicht verfügbar ist.)

resources([[joel, [ece2090,ece2010,ece3520,ece4420],[[m,13,16]]],
 [sam, [ece2090,ece4420],[]],
[pete, [ece3520],[[w,13,16]]]].

In dieser Version kann jeder TA nur eine Klasse belegen. Ich habe ein Programm dafür erstellt, und eine Lösung finden Sie weiter unten.

A = [[ece2090, 1, 'NONE'], [ece3520, 1, joel], [ece4420, 1, sam]] .

Dies sind die Paarungen von TAs zu Kursen. Wie Sie sehen können, trägt man die Bezeichnung none. Wenn Sie jedoch nachsehen, sehen Sie eine gültige Konfiguration, die alle Baum-TAs zuweist (Pete zu ECE3520, Sam zu ECE2090 und Joel zu ECE4420). Für die Zwecke der folgenden Frage werden beide als Lösungen betrachtet.

Wie zeige ich alle Lösungen an? Findall ist in der Regel der richtige Weg, und eine unvermeidbare Fail-Klausel ist ebenfalls der Trick, aber hier ist der Kicker: Bei einem Prolog sind Anforderungen und Ressourcen nur eine Instanz einer Variablen anstelle von drei, da es sich um Matrizen handelt. Aus diesem Grund gibt es nichts, was ein Prolog zurückverfolgen könnte, wenn ich das Zurückverfolgen mit einer Fail-Klausel oder findall @ erzwingen würd

So gibt es eine Möglichkeit, alle Lösungen zu finden? Kann ich jede mögliche Anordnung einer Matrix irgendwie nehmen und sie alle in das Programm werfen?

Antworten auf die Frage(4)

Ihre Antwort auf die Frage