Логическая задача на Visual Prolog, проверка условий

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

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

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

Решение задачи: «Логическая задача на Visual Prolog, проверка условий»

textual
Листинг программы
  1. ?- time(жители1(Жители)).
  2. % 6,289 inferences, 0.000 CPU in 0.006 seconds (0% CPU, Infinite Lips)
  3. Жители = [чел(а, пешком, зеленое), чел(б, трамваем, оранжевое), чел(в, такси, красное), чел(г, трамваем, синее)] .

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


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

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

14   голосов , оценка 3.786 из 5

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

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

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