Eine Beispielaufgabe in Prolog ist das Aufteilen von Vorlesungen auf Räume und Zeiten. Das Szenario für dieses Beispiel ist folgendes: Professor Schmidt hält die Vorlesung Rechnernetze und Rechnernetze II sowie das dazugehörige Rechnernetze Praktikum. Professor Müller hält die Vorlesung Betriebssysteme sowie das Betriebssysteme Praktikum.
Es gibt 3 Räume R1, R2 und R3 sowie 3 Zeitblöcke, Zeitblock 1 (8 bis 9:30 Uhr), Zeitblock 2 (10 bis 11:30 Uhr) und Zeitblock 3 (12 bis 13:30 Uhr). Der Wertebereich umfasst alle möglichen Kombinationen von Räumen und Zeiten. Bei den möglichen Wertebelegungen [11,12,13,21,22,23,31,32,33] steht die 1. Zahl für den Zeitblock und die 2. Zahl für den Raum. "31" wäre demnach der Raum R1 und der Zeitblock 1. Man kann sich den Plan als eine 3x3-Matrix vorstellen. Die Beschränkungen, die in der Beispielaufgabe beachtet werden sollen, sind im Quelltext als Kommentar gelistet.
Rechnernetze_1 :-
fd_domain([Rechnernetze_1, Rechnernetze_2, Rechnernetze_P, Betriebssysteme, Betriebssysteme_P],
[11,12,13,21,22,23,31,32,33]),
fd_all_different([Rechnernetze_1, Rechnernetze_2, Rechnernetze_P, Betriebssysteme, Betriebssysteme_P]),
fd_labeling([Rechnernetze_1, Rechnernetze_2, Rechnernetze_P, Betriebssysteme, Betriebssysteme_P]),
% Die Vorlesung Betriebssysteme 2 darf nicht vor Betriebssysteme 1 liegen.
Rechnernetze_2 #> Rechnernetze_1,
% Praktika dürfen nicht vor den entsprechenden Vorlesungen liegen
Rechnernetze_P #> Rechnernetze_2,
Betriebssysteme_P #> Betriebssysteme,
% Praktika können nur im Raum L1 stattfinden.
Rechnernetze_P #\= 11,
Rechnernetze_P #\= 12,
Rechnernetze_P #\= 21,
Rechnernetze_P #\= 22,
Rechnernetze_P #\= 31,
Rechnernetze_P #\= 32,
Betriebssysteme_P #\= 11,
Betriebssysteme_P #\= 12,
Betriebssysteme_P #\= 21,
Betriebssysteme_P #\= 22,
Betriebssysteme_P #\= 31,
Betriebssysteme_P #\= 32,
% Professoren können nicht zur selben Zeit in verschiedenen Räumen sein
dist(Rechnernetze_1, Rechnernetze_2) #>= 8,
dist(Rechnernetze_2, Rechnernetze_P) #>= 10,
dist(Betriebssysteme, Betriebssysteme_P) #>= 10,
% Ausgabe der Liste
write([Rechnernetze_1, Rechnernetze_2, Rechnernetze_P, Betriebssysteme, Betriebssysteme_P]), nl.
Bei Ausführung dieses Programms mit GNU-Prolog gibt der Interpreter insgesamt 12 mögliche Raumbelegungen, die die Beschränkungen einhalten, aus.
Bei Amazon ansehen(Affiliate-Link)
*) Bei den mit * gekennzeichneten Links handelt es sich um Affiliate-Links (Werbung). Wird über einen solchen Link ein Kauf getätigt, erhält der Betreiber dieser Website eine Provision vom Händler; am Preis ändert sich dadurch nichts.