Created
June 18, 2014 14:23
-
-
Save ichistmeinname/4fc56fa9215c028f2b01 to your computer and use it in GitHub Desktop.
Ninth session
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
kandidat(maier). | |
kandidat(mueller). | |
kandidat(schroeder). | |
kandidat(schulz). | |
alleKandidat(vorstand(V,S,K)) :- kandidat(V), kandidat(S), kandidat(K). | |
einerKandidat(vorstand(V,S,K)) :- kandidat(V); kandidat(S); kandidat(K). | |
% alternativ: | |
% einerKandidat(vorstand(V,_,_)) :- kandidat(V). | |
% einerKandidat(vorstand(_,S,_)) :- kandidat(S). | |
% einerKandidat(vorstand(_,_,K)) :- kandidat(K). | |
alleVerschieden(vorstand(V,S,K)) :- | |
verschieden(V,S), verschieden(S,K), verschieden(V,K). | |
% Funktion, um einen Vorstand zu bestimmen | |
loese(V) :- alleKandidat(V), | |
alleVerschieden(V), | |
maierOderMueller(V), | |
muellerWennSchulz(V), | |
schroederWennMaier(V), | |
maierNichtWennSchulz(V), | |
schulzNichtWennSchroeder(V). | |
% wir haben kein ungleich, daher definieren wir eine Relation `verschieden` | |
verschieden(maier,mueller). | |
verschieden(maier,schulz). | |
verschieden(maier,schroeder). | |
verschieden(mueller,schulz). | |
verschieden(mueller,schroeder). | |
verschieden(mueller,maier). | |
verschieden(schulz,maier). | |
verschieden(schulz,mueller). | |
verschieden(schulz,schroeder). | |
verschieden(schroeder,maier). | |
verschieden(schroeder,mueller). | |
verschieden(schroeder,schulz). | |
nichtImVorstand(P,vorstand(V,S,K)) :- | |
(verschieden(P,V), verschieden(P,S), verschieden(P,K)). | |
imVorstand(P,vorstand(P,_,_)). | |
imVorstand(P,vorstand(_,P,_)). | |
imVorstand(P,vorstand(_,_,P)). | |
% Maier und Mueller wollen nicht gemeinsam in den Vorstand. | |
maierOderMueller(V) :- nichtImVorstand(maier,V). | |
maierOderMueller(V) :- nichtImVorstand(mueller,V). | |
/* Mueller steht nur für den Vorstand zur Verfuegung, | |
wenn Schulz Vorsitzender wird. */ | |
muellerWennSchulz(vorstand(_,S,K)) :- | |
imVorstand(mueller,vorstand(schulz,S,K)). | |
muellerWennSchulz(V) :- nichtImVorstand(mueller,V). | |
/* Schroeder geht nur dann in den Vorstand, | |
wenn auch Maier diesem angehoert. */ | |
schroederWennMaier(V) :- | |
imVorstand(schroeder,V), imVorstand(maier,V). | |
schroederWennMaier(V) :- nichtImVorstand(schroeder,V). | |
/* Maier will nicht in den Vorstand, | |
wenn Schulz der Schriftfuehrer wird. | |
*/ | |
maierNichtWennSchulz(vorstand(V,S,K)) :- | |
imVorstand(maier,vorstand(V,S,K)), verschieden(schulz,S). | |
maierNichtWennSchulz(V) :- nichtImVorstand(maier,V). | |
/* Schulz tritt dem Vorstand nicht bei, | |
falls Schroeder Vorsitzender wird. */ | |
schulzNichtWennSchroeder(vorstand(V,S,K)) :- | |
imVorstand(schulz,vorstand(V,S,K)), verschieden(schroeder,V). | |
schulzNichtWennSchroeder(V) :- nichtImVorstand(schulz,V). | |
*/ Haskell-Code fuer `head` | |
head (x:_) = x | |
*/ | |
% `head` als Relation | |
head([X|_],X). | |
/* Haskell-Code | |
firstTwo (x:y:_) = [x,y] | |
*/ | |
% `firstTwo` als Relation | |
firstTwo([X,Y|_],[X,Y]). | |
/* Haskell-Code für `take` | |
take 0 xs = [] | |
take n [] = [] | |
take n (x:xs) = x : ys | |
where ys = take (n-1) xs | |
*/ | |
% take als Relation | |
take(0,_,[]). | |
take(_,[],[]). | |
take(N,[X|Xs],[X|Ys]) :- N > 0, M is N-1, take(M,Xs,Ys). | |
/* Haskell-Code für `append` | |
append [] ys = ys | |
append (x:xs) ys = x : zs | |
where zs = append xs ys | |
/* | |
% append als Relation | |
append2([],Ys,Ys). | |
append2([X|Xs],Ys,[X|Zs]) :- append2(Xs,Ys,Zs). | |
/* | |
Um eine grobe Vorstellung davon zu bekommen, | |
was da eigentlich passiert. Keine Panik, das wird | |
alles auch noch ausführlich in der Vorlesung besprochen. | |
take(1,[1,2],[1,2]). | |
= take(0,[2],[2]) | |
= <keine Regel passt> | |
take(1,[1,2],[1]) | |
= take(0,[2],[]) | |
= . | |
take(1,[1,2],[V|V1]) ~> V = 1 | |
= take(0,[2],V1) ~> V1 = [] | |
= . | |
*/ |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment