<div class="notebook">
<div class="nb-cell markdown" name="md1">
*Логическая задача: Результаты соревнования*
</div>
<div class="nb-cell markdown" name="md2">
В спортивных соревнованиях принимали участие пять пионерских команд:
</div>
<div class="nb-cell markdown" name="md3">
"Вымпел", "Метеор", "Нептун", "Старт" и "Чайка".
</div>
<div class="nb-cell program" data-background="true" name="p1">
game_pool(["Вымпел", "Метеор", "Нептун", "Старт", "Чайка"]).
</div>
<div class="nb-cell markdown" name="md4">
Об их итогах соревнования имеется пять высказываний:
</div>
<div class="nb-cell markdown" name="md5">
1) Второе место занял "Вымпел", a "Cтарт" оказался на третьем.
</div>
<div class="nb-cell program" data-background="true" name="p2">
game_claim(1, place("Вымпел", 2), place("Старт", 3)).
</div>
<div class="nb-cell markdown" name="md7">
2) Хорошо выступала команда "Нептун", она стала победителем, а "Чайка" вышла на второе место.
</div>
<div class="nb-cell program" data-background="true" name="p3">
game_claim(2, place("Нептун", 1), place("Чайка", 2)).
</div>
<div class="nb-cell markdown" name="md8">
3) Да нет же, "Чайка" заняла только третье место, а "Нептун"- был последним.
</div>
<div class="nb-cell program" data-background="true" name="p4">
game_claim(3, place("Чайка", 3), place("Нептун", 5)).
</div>
<div class="nb-cell markdown" name="md9">
4) Первое место по праву завоевал "Cтарт", а "Метеор" был четвертым.
</div>
<div class="nb-cell program" data-background="true" name="p5">
game_claim(4, place("Старт", 1), place("Метеор", 4)).
</div>
<div class="nb-cell markdown" name="md10">
5) Да, "Метеор" действительно был четвертым, а "Вымпел" был вторым.
</div>
<div class="nb-cell program" data-background="true" name="p6">
game_claim(5, place("Метеор", 4), place("Вымпел", 2)).
</div>
<div class="nb-cell markdown" name="md11">
Известно, что команды не делили места между собой,
</div>
<div class="nb-cell markdown" name="md12">
и, что в каждом высказывании одно утверждение правильное, а другое нет.
</div>
<div class="nb-cell markdown" name="md13">
Как распределились места между командами?
</div>
<div class="nb-cell markdown" name="md14">
Основной код:
</div>
<div class="nb-cell program" data-background="true" name="p7">
game_result :-
game_pool(Xs),
permutation1(Xs, Ys),
game_check(Ys),
game_result_out(Ys).
game_result(Zs) :-
game_pool(Xs),
permutation1(Xs, Ys),
game_check(Ys),
game_result_out(Ys, Ys, Zs).
game_check(Ys) :-
game_check(Ys, 1, 5).
game_check(_, K0, K) :-
K0 > K.
game_check(Ys, K0, K) :-
not( K0 > K ),
game_claim(K0, Claim1, Claim2),
game_check_claim(Ys, Claim1, Claim2),
K1 is K0 + 1,
game_check(Ys, K1, K).
game_check_claim(Ys, place(Team1, Place1), place(Team2, Place2)) :-
on_place(Ys, Team1, Place1),
not( on_place(Ys, Team2, Place2) ).
game_check_claim(Ys, place(Team1, Place1), place(Team2, Place2)) :-
not( on_place(Ys, Team1, Place1) ),
on_place(Ys, Team2, Place2).
game_result_out(Ys) :-
member1(Y, Ys),
on_place(Ys, Y, N),
write(N), write("-"), write(Y), nl,
fail.
game_result_out(_).
game_result_out([], _, []).
game_result_out([Y | Ys], Ys0, [result(N, Y) | Zs]) :-
on_place(Ys0, Y, N),
game_result_out(Ys, Ys0, Zs).
on_place(Xs, X, N) :-
on_place(Xs, X, N, 1).
on_place([X | _], X, N, N).
on_place([_ | Xs], X, N, N0) :-
N1 is N0 + 1,
on_place(Xs, X, N, N1).
</div>
<div class="nb-cell markdown" name="md17">
Библиотечные предикаты:
</div>
<div class="nb-cell program" data-background="true" name="p8">
permutation1([], []).
permutation1(List, [First | Perm]) :-
select1(First, List, Rest),
permutation1(Rest, Perm).
select1(Elem, [Elem | Tail], Tail).
select1(Elem, [Head | Tail], [Head | Rest]) :-
select1(Elem, Tail, Rest).
member1(Elem, [Elem | _]).
member1(Elem, [_ | Tail]):-
member1(Elem, Tail).
</div>
<div class="nb-cell markdown" name="md18">
Запрос для вывода результата:
</div>
<div class="nb-cell query" name="q1">
game_result.
</div>
<div class="nb-cell markdown" name="md19">
Запрос с использованием табличного вывода:
</div>
<div class="nb-cell program" data-background="true" name="p9">
:- use_rendering(table, [header(result('Место','Команда'))]).
</div>
<div class="nb-cell query" name="q2">
game_result(Zs).
</div>
</div>