Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- rozwiazanie([Morderca, Pomocnik]) :-
- L0 = [alicja, celina, beata, dorota], %L0 to lista wszystkich sąsiadów
- select(Morderca, L0, L1), %tutaj robimy coś takiego, że wybieramy morderce z L0 i zostaje lista L1, np. Morderca = alicja, to wtedy L1 =[celina,beata,dorota]
- select(Pomocnik, L1, Niewinne), %tutaj analogicznie jak poprzednio
- zeznanieA([Morderca, Pomocnik], Niewinne), %tu bedziemy wywoływać zeznania
- zeznanieB([Morderca, Pomocnik], Niewinne),
- zeznanieC([Morderca, Pomocnik], Niewinne),
- zeznanieD([Morderca, Pomocnik], Niewinne).
- %pierwszy nawias w kazdym zeznaniu mowi o tym, co jest prawda jesli zeznanie prawdziwe, a drugi nawias co jesli zeznanie jest falszywe
- zeznanieA(_, N) :-
- (
- member(alicja, N),!, %jesli A mowi prawde to zakladamy, ze A nalezy do N, czyli do Niewinnych (warto zerknac na gore ze to N to jest to Niewinne z gory)
- (member(celina, N) ; member(beata, N)) %tutaj jest zeznanie zamienione z implikacji na alternatywe
- ) ;
- (
- \+ (member(celina, N) ; member(beata, N)) % jesli A klamime to znaczy ze prawdziwe jest zaprzeczenie tego co powiedziala
- ).
- zeznanieB(W, N) :-
- (
- member(beata, N),!,
- ( member(alicja,W) ; member(celina,W) )
- ) ;
- (
- \+ ( member(alicja,W) ; member(celina,W) )
- ).
- zeznanieC([M,_],N) :-
- (
- member(celina, N),!,
- ( M \= beata ; member(dorota, N) )
- ) ;
- (
- \+ ( M \= beata ; member(dorota, N) )
- ).
- zeznanieD(_,N) :-
- ( member(dorota,N)
- );
- (
- \+ member(dorota,N)
- ).
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement