ist priek (bo priek). ist priek (ki priek). ist priek (bla priek). WER GNASELT WEN :- population (B), member ([WEN, WER, _], B), bedingungen (B). WER KNAUDERT WEN:- population (B), member ([WER, _, WEN], B), bedingungen (B). population (B):- sind prieks (U, V, W), sind knauderarten (R, S, T), B = [ [drausla puemfe, U, R], [glessla puemfe, V, S], [hapla puemfe, W, T] ]. sind prieks (X,Y,Z):- ist priek (G), ist priek (H), H<>G, ist priek (I), I<>G, I<>H, !, permute ([G,H,I], [X,Y,Z]). sind knauderarten (X,Y,Z):- ist knauderart (G), ist knauderart (H), H<>G, ist knauderart (I), I<>G, I<>H, !, permute ([G,H,I],[X,Y,Z]). ist knauderart (an). ist knauderart (ab). ist knauderart (ueber). bedingungen (B):- not member ([hapla puemfe,ki priek,_],B) , not member ([hapla puemfe,_,ueber],B) , not member ([drausla puemfe,bo priek,_],B) , not member ([_,bo priek,ab],B) , noch ne bedingung (B) , weitere bedingungen (B) , !. weitere bedingungen (B):- not member([_,ki priek,ueber],B), not member([_,bo priek,ueber],B) ; member([drausla puemfe,_,an],B). noch ne bedingung (B):- not member ([drausla puemfe,ki priek,_],B) ; not member ([glessla puemfe,_,ueber],B). permute ([], []). permute (X, [Y|Z]):- delete (Y ,X, E), permute (E, Z). delete (X, [X|Z], Z). delete (X, [Y|Z], [Y|E]):- delete (X, Z, E). member (X, [X|Z]). member (X, [Y|Z]):- member (X, Z). not member (X, []). not member (X, [Y|Z]):- X <> Y, not member (X,Z).