% Die Kandidaten kandidat(maier). kandidat(mueller). kandidat(schroeder). kandidat(schulz). % Beliebiger Vorstand ohne Einschraenkungen: vorstand([Vorsitz,Kassierer,Schreiber]) :- kandidat(Vorsitz), kandidat(Kassierer), kandidat(Schreiber), alleVerschieden([Vorsitz,Kassierer,Schreiber]). alleVerschieden([]). alleVerschieden([X|Xs]) :- nichtEnthalten(X,Xs), alleVerschieden(Xs). nichtEnthalten(_,[]). nichtEnthalten(X,[Y|Ys]) :- dif(X,Y), nichtEnthalten(X,Ys). % Eingeschraenkter Vorstand moeglicherVorstand(Vorstand) :- vorstand(Vorstand), nichtMaierUndMueller(Vorstand), muellerNurWennSchulzVorsitz(Vorstand), schroederNurMitMaier(Vorstand), nichtMaierWennSchulzSchreiber(Vorstand), nichtSchulzWennSchroederVorsitz(Vorstand). % Maier und Mueller wollen nicht gemeinsam in den Vorstand % nicht (maier und mueller) = (nicht maier) oder (nicht mueller) nichtMaierUndMueller(Vorstand) :- nichtEnthalten(maier,Vorstand). nichtMaierUndMueller(Vorstand) :- nichtEnthalten(mueller,Vorstand). % Mueller steht nur fuer den Vorstand zur Verfuegung, % wenn Schulz den Vorsitz uebernimmt. % wenn mueller, dann schulz Vorsitz = (nicht mueller) oder schulz Vorsitz muellerNurWennSchulzVorsitz(Vorstand) :- nichtEnthalten(mueller,Vorstand). muellerNurWennSchulzVorsitz([schulz,_,_]). % Schroeder geht nur dann in den Vorstand, wenn auch Maier diesem angehoert. % wenn schroeder, dann maier = (nicht schroeder) oder maier schroederNurMitMaier(Vorstand) :- nichtEnthalten(schroeder,Vorstand). schroederNurMitMaier(Vorstand) :- enthalten(maier,Vorstand). enthalten(X,[X|_]). enthalten(X,[_|Xs]) :- enthalten(X,Xs). % Maier will nicht in den Vorstand, wenn Schulz der Schriftfuehrer wird. % schulz Schreiber -> nicht maier = (nicht schulz Schreiber) oder (nicht maier) nichtMaierWennSchulzSchreiber([_,_,Schreiber]) :- dif(schulz,Schreiber). nichtMaierWennSchulzSchreiber(Vorstand) :- nichtEnthalten(maier,Vorstand). % Schulz tritt dem Vorstand nicht bei, falls Schroeder der Vorsitzende wird. % schroeder Vorsitz -> nicht schulz nichtSchulzWennSchroederVorsitz([Vorsitz,_,_]) :- dif(schroeder,Vorsitz). nichtSchulzWennSchroederVorsitz(Vorstand) :- nichtEnthalten(schulz,Vorstand).