Логическая задача PROLOG - Prolog (226583)

Узнай цену своей работы

Формулировка задачи:

болельщики автогонок "Формула-1", спорили о результатах предстоящего этапа гонок. — Вот увидишь, Шумахер не придет первым, — сказал Дима. Первым будет Хилл. — Да нет же, победителем будет, как всегда, Шумахер, — воскликнул Никита. — А об Алези и говорить нечего, ему не быть первым. Паша, к которому обратился Никита, возмутился: — Хиллу не видать первого места, а вот Алези пилотирует самую мощную машину. По завершении этапа гонок оказалось, что каждое из двух предположений двоих друзей подтвердилось, а оба предположения третьего из друзей оказались неверны. Кто выиграл этап гонки?

Решение задачи: «Логическая задача PROLOG»

textual
Листинг программы
% — Вот увидишь, Шумахер не придет первым, — сказал Дима.
approve(dima, shum, no).
% Первым будет Хилл.
approve(dima, hill, yes).
% — Да нет же, победителем будет, как всегда, Шумахер, — воскликнул Никита.
approve(nik, shum, yes).
% — А об Алези и говорить нечего, ему не быть первым.
approve(nik, alesi, no).
% Паша, к которому обратился Никита, возмутился:
% — Хиллу не видать первого места,
approve(pasha, hill, no).
% а вот Алези пилотирует самую мощную машину.
approve(pasha, alesi, yes).
 
% По завершении этапа гонок оказалось, что каждое из двух предположений двоих
% друзей подтвердилось, а оба предположения третьего из друзей оказались неверны.
% Кто выиграл этап гонки?
win_race1(Win) :-
  % если один из болельщиков назвал пилота-победителя правильно
  approve(Fan1, Win, yes),
  % и не назвал иначе
  \+ approve(Fan1, Win, no),
  % то другой
  approve(Fan2, _, _),
  % угадал так же,
  approve(Fan2, Win, yes),
  % и, не говорил, что этот пилот не победит
  \+ approve(Fan2, Win, no),
  % а третий
  approve(Fan3, _, _),
  % утверждал, что выигравший пилот не будет победителем,
  approve(Fan3, Win, no),
  % и также не утверждал, что будет
  \+ approve(Fan3, Win, yes),
  % рассуждения вели разные болельщики
  is_distinct([Fan1, Fan2, Fan3]).
 
% все элементы списка разные
is_distinct([]).
is_distinct([H | T]) :-
  \+ member1(H, T),
  !,
  is_distinct(T).
 
% принадлежность
member1(X,[X|_]).
member1(X,[_|T]):-
    member1(X,T).

Объяснение кода листинга программы

Код представляет собой логическую задачу, в которой рассматривается ситуация с гонками и предсказаниями болельщиков. В первой части кода болельщики делают свои предсказания относительно победителей гонки. Затем, во второй части кода, с помощью правил логики и предположений каждого из болельщиков, определяется победитель гонки. В третьей части кода проверяется уникальность элементов списка, что означает, что каждый болельщик высказал свое собственное мнение. В четвертой части кода определяется, принадлежит ли элемент списку или нет. Таким образом, в результате работы программы можно определить, кто выиграл этап гонки, исходя из предсказаний болельщиков.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

12   голосов , оценка 3.75 из 5