1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
|
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).
|