Задача на выявление истины - Prolog

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

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

Всем привет. Имеется следующая задача: Один раз на стройке пропали кирпичи. Прораб, возмущённый тем, что кирпичи пропали без его ведома, решил выяснить кто же решился на такой дерзкий поступок. Выяснилось, что кирпичи могли украсть или монтажник Иванов или крановщик Сидоров или моляр Петров. Прораб выяснил, что укравший кирпичи был левша. Каждый из трёх подозреваемых сделал по два утверждения: Иванов: - Я не левша. Я не брал кирпичи. Сидоров: - Я левша. Я не брал кирпичи. Петров: - Я не левша. Левша брал кирпичи. Прораб обнаружил, что двое из подозреваемых сказали правду и только один из подозреваемых не был левшой, так кто украл? Начал решать задачу, но не могу выделить два правильных утверждения. Вот мой код на SWI-prolog:
Возможно у меня всё неправильно. Кто может подскажите как решать задачи такого типа.

Решение задачи: «Задача на выявление истины»

textual
Листинг программы
assertion(ivanov, not_left, dont_take).
assertion(sidorov, left, dont_take).
assertion(petrov, not_left, left_take).
 
thief(X,_,Z):-
  assertion(X2,Y2,_),
  assertion(X1,Y1,_),
  assertion(X,Y,Z),
  Y2\=Y1, Y2=Y, X2\=X1, X\=X2, X\=X1.

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

В этом коде:

  1. ivanov - это имя первого человека.
  2. not_left - это то, что первый человек не левша.
  3. dont_take - это то, что первый человек не берет предмет.
  4. sidorov - это имя второго человека.
  5. left - это то, что второй человек левша.
  6. petrov - это имя третьего человека.
  7. not_left - это то, что третий человек не левша.
  8. left_take - это то, что третий человек берет предмет.
  9. X - это переменная, которая используется для обозначения имени человека.
  10. Y - это переменная, которая используется для обозначения того, является ли человек левшой или берет ли он предмет.
  11. Z - это переменная, которая используется для обозначения результата вычисления.
  12. X2 и X1 - это две переменные, которые используются для обозначения предыдущих значений переменной X.
  13. Y2 и Y1 - это две переменные, которые используются для обозначения предыдущих значений переменной Y.
  14. thief(X,_,Z) - это функция, которая определяет, является ли человек вором.
  15. Функция thief(X,_,Z) используется для сопоставления шаблонов с использованием правил вывода.
  16. Правила вывода проверяют, является ли второй человек левшой и берет ли он предмет, и если да, то сопоставляют его с первым человеком.
  17. Если второй человек не левша и не берет предмет, и если первый человек не левша и не берет предмет, то сопоставляют его с третьим человеком.
  18. Если второй человек левша и берет предмет, и если первый человек не левша и не берет предмет, то сопоставляют его с третьим человеком.
  19. Если второй человек не левша и не берет предмет, и если первый человек левша и не берет предмет, то сопоставляют его с третьим человеком.
  20. Если второй человек левша и берет предмет, и если первый человек левша и не берет предмет, то сопоставляют его с третьим человеком.

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


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

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

8   голосов , оценка 4 из 5