"Попытка диверсии" логическая задача - Prolog

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

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

Необходимо решить задачу на Visual Prolog 5.2: Попытка диверсии На планету Дранак прилетел космический корабль, но не все местные жители этому обрадовались. Ночью неизвестный преступник прокрался к кораблю и хотел сломать систему подачи воздуха. На следующий день задержали троих подозреваемых. Каждый из них высказался три раза. Мы знаем, что все высказывания одного из подозреваемых - правда, все высказывания второго - ложь, а про то, насколько лжет третий, ничего не известно. Тем не менее преступника можно найти. Кто это? А: 1. Это сделал не я. 2. Я всегда говорю правду. 3. Мне не нравятся космические полеты. Б: 1. Это сделал не я. 2. Я всегда говорю неправду. 3. Мне не нравятся пришельцы из космоса. В: 1. Это сделал не я. 2. Только одно из моих высказываний ложно. 3. Мне нравятся гости из космоса. Своими силами получился такой код:
Листинг программы
  1. DOMAINS
  2. имя = symbol
  3. номер = integer
  4.  
  5. PREDICATES
  6. nondeterm возможное_имя(имя)
  7. nondeterm сказал (имя, номер)
  8. nondeterm является_преступником (имя)
  9. nondeterm говорит_правду (имя,номер)
  10. nondeterm говорит_ложь (имя,номер)
  11. nondeterm говорит_неизвестно (имя)
  12.  
  13. CLAUSES
  14. возможное_имя(а).
  15. возможное_имя(б).
  16. возможное_имя(в).
  17. % Высказывания
  18. % Это сделал не я.
  19. сказал (а,1):-
  20. not(является_преступником(а)).
  21. % Мне не нравятся космические полеты.
  22. сказал (а,2):-
  23. является_преступником(а).
  24. % Я всегда говорю правду.
  25. сказал (а,3):-
  26. сказал (а,3), сказал (а,1), сказал (а,2).
  27. % Это сделал не я.
  28. сказал (б,1):-
  29. not(является_преступником(б)).
  30. % Мне не нравятся пришельцы из космоса.
  31. сказал (б,2):-
  32. является_преступником(б).
  33. % Я всегда говорю неправду.
  34. сказал (б,3):-
  35. not(сказал (б,3)), not(сказал (б,1)), not(сказал (б,2)).
  36. % Это сделал не я.
  37. сказал (в,1):-
  38. not(является_преступником(в)).
  39. % Мне нравятся гости из космоса.
  40. сказал (в,2):-
  41. not(является_преступником(в)).
  42. % Только одно из моих высказываний ложно.
  43. сказал (в,3):-
  44. not(сказал (в,1)), сказал (в,2), сказал (в,3);
  45. сказал (в,1), not(сказал (в,2)), сказал (в,3);
  46. сказал (в,1), сказал (в,2), not(сказал (в,3)).
  47.  
  48. % Проверка правдивости высказывания в зависимости от того, кем является персонаж
  49. % все высказывания одного из подозреваемых - правда
  50. говорит_правду(Кто_сказал,Номер_высказывания):-
  51. сказал (Кто_сказал, Номер_высказывания).
  52. % все высказывания второго - ложь
  53. говорит_ложь(Кто_сказал,Номер_высказывания):-
  54. not(сказал (Кто_сказал, Номер_высказывания)).
  55. % насколько лжет третий, ничего не известно.
  56. говорит_неизвестно(Кто_сказал):-
  57. сказал (Кто_сказал,1), сказал (Кто_сказал,2), сказал (Кто_сказал,3);
  58. сказал (Кто_сказал,1), сказал (Кто_сказал,2), not(сказал (Кто_сказал,3));
  59. сказал (Кто_сказал,1), not(сказал (Кто_сказал,2)), сказал (Кто_сказал,3);
  60. сказал (Кто_сказал,1), not(сказал (Кто_сказал,2)), not(сказал (Кто_сказал,3));
  61. not(сказал (Кто_сказал,1)), сказал (Кто_сказал,2), сказал (Кто_сказал,3);
  62. not(сказал (Кто_сказал,1)), сказал (Кто_сказал,2), not(сказал (Кто_сказал,3));
  63. not(сказал (Кто_сказал,1)), not(сказал (Кто_сказал,2)), сказал (Кто_сказал,3);
  64. not(сказал (Кто_сказал,1)), not(сказал (Кто_сказал,2)), not(сказал (Кто_сказал,3)).
  65.  
  66. % Поиск ответа задачи
  67. является_преступником(Преступник):-
  68. % Генерация гипотезы.
  69. %возможное_имя(Преступник),
  70. возможное_имя(П),
  71. возможное_имя(Л), not(Л=П),
  72. возможное_имя(Н), not(Н=П), not(Н=Л),
  73. % Проверка высказываний
  74. говорит_правду(П,1),
  75. говорит_правду(П,2),
  76. говорит_правду(П,3),
  77. говорит_ложь(Л,1),
  78. говорит_ложь(Л,2),
  79. говорит_ложь(Л,3),
  80. говорит_неизвестно(Н).
  81. GOAL
  82. является_преступником(Преступник).
При попытке решения выплывает “PROGRAM ERROR. 1010”, подскажите пожалуйста с чем связана ошибка и как можно ее исправить.

Решение задачи: «"Попытка диверсии" логическая задача»

textual
Листинг программы
  1. 1010 Stack overflow

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


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

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

9   голосов , оценка 3.556 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут