Как исправить ошибку: "Two free variables in expression"? - Prolog

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

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

Листинг программы
  1. DOMAINS
  2. островетянин, селение=symbol
  3. номер=integer
  4. список_селений=селение*
  5. житель=житель(островетянин, селение)
  6. список_жителей=житель*
  7. ответы=integer*
  8. PREDICATES
  9. nondeterm входит_в(селение, список_селений)
  10. nondeterm входит_в(житель, список_жителей)
  11. nondeterm ответ(номер, житель, список_жителей)
  12. nondeterm проверка(номер, житель, список_жителей,integer)
  13. nondeterm решение(список_жителей)
  14. nondeterm правильные_ответы(селение,ответы)
  15. CLAUSES
  16. входит_в(Голова, [Голова|_]).
  17. входит_в(Голова, [_|Хвост]) :- входит_в(Голова, Хвост).
  18. % (1) X: я живу в том же селении, что и Y.
  19. ответ(1, житель(x, Селение_Х), Живут_в) :-
  20. входит_в(житель(x, Селение_Х), Живут_в), входит_в(житель(y, Селение_Y), Живут_в), Селение_Х=Селение_Y.
  21. % (2) Y: я живу в том же селении, что и Z.
  22. ответ(2, житель(y, Селение_Y), Живут_в) :-
  23. входит_в(житель(y, Селение_Y), Живут_в), входит_в(житель(z, Селение_Z), Живут_в), Селение_Y=Селение_Z.
  24. % (3) Z: ни X, ни Y мне не "земляки".
  25. ответ(3, житель(z, Селение_Z), Живут_в) :-
  26. входит_в(житель(z, Селение_Z), Живут_в), входит_в(житель(x, Селение_Х), Живут_в),
  27. входит_в(житель(y, Селение_Y), Живут_в), not(Селение_Z=Селение_Y), not(Селение_Z=Селение_Х).
  28. % (4) X: Z из Середины-на-Половине.
  29. ответ(4, житель(x, Селение_Х), Живут_в) :-
  30. входит_в(житель(x, Селение_Х), Живут_в), входит_в(житель(z, Селение_Z), Живут_в),
  31. Селение_Z="Середина_на_половине".
  32. % (5) Y: от селения, где живет X, до моего селения такое же расстояние, как от Середины-иа-Половине до Кривдина
  33. ответ(5, житель(y, Селение_Y), Живут_в) :-
  34. входит_в(житель(y, Селение_Y), Живут_в), входит_в(житель(x, Селение_Х), Живут_в), not(Селение_Х=Селение_Y).
  35. % (6) Z: X и Y не из одного селения.
  36. ответ(6, житель(z, Селение_Z), Живут_в) :-
  37. входит_в(житель(z, Селение_Z), Живут_в), входит_в(житель(x, Селение_Х), Живут_в),
  38. входит_в(житель(y, Селение_Y), Живут_в), not(Селение_Х=Селение_Y).
  39. % (7) X: пока мы здесь беседовали, Z успел один раз солгать.
  40. ответ(7, житель(x, Селение_Х), Живут_в) :-
  41. not(ответ(3, житель(z, _), Живут_в)), ответ(6, житель(z, _), Живут_в);
  42. not(ответ(6, житель(z, _), Живут_в)), ответ(3, житель(z, _), Живут_в).
  43. % (8) Y: зато Х все время изрекал только истину.
  44. ответ(8, житель(y, _), Живут_в) :-
  45. ответ(1, житель(x, Селение_Х), Живут_в),
  46. ответ(4, житель(x, Селение_Х), Живут_в),
  47. ответ(7, житель(x, Селение_Х), Живут_в).
  48. % (9) Z: последнее утверждение как у X, так и у Y ложно.
  49. ответ(9, житель(z, _), Живут_в) :-
  50. not(ответ(7, житель(x, _), Живут_в)),
  51. not(ответ(8, житель(y, _), Живут_в)).
  52. проверка(Номер_ответа, Житель, Живут_в,1) :-
  53. ответ(Номер_ответа, Житель, Живут_в).
  54. проверка(Номер_ответа, Житель, Живут_в,0) :-
  55. not(ответ(Номер_ответа, Житель, Живут_в)).
  56. правильные_ответы("Правдычино",[1,1,1]).
  57. правильные_ответы("Кривдино",[0,0,0]).
  58. правильные_ответы("Середина_на_половине",[1,0,1]).
  59. правильные_ответы("Середина_на_половине",[0,1,0]).
  60. решение(Живут_в) :-
  61. Живут_в=[житель(x, Селение_Х), житель(y, Селение_Y), житель(z, Селение_Z)],
  62. Селения=["Правдычино", "Кривдино", "Середина_на_половине"],
  63. входит_в(Селение_Х, Селения), входит_в(Селение_Y, Селения), входит_в(Селение_Z, Селения),
  64. правильные_ответы(Селение_Х,[ОтветX1,ОтветX2,ОтветX3]),
  65. правильные_ответы(Селение_Y,[ОтветY1,ОтветY2,ОтветY3]),
  66. правильные_ответы(Селение_Z,[ОтветZ1,ОтветZ2,ОтветZ3]),
  67. % ПРОВЕРКА: Село_Х не равно Село_Y, Село_Z не равно Село_Y, Село_Х не равно Село_Z
  68. проверка(1, житель(x, Селение_Х), Жители,ОтветX1),
  69. проверка(2, житель(y, Селение_Y), Жители,ОтветY1),
  70. проверка(3, житель(z, Селение_Z), Жители,ОтветZ1),
  71. проверка(4, житель(x, Селение_Х), Жители,ОтветX2),
  72. проверка(5, житель(y, Селение_Y), Жители,ОтветY2),
  73. проверка(6, житель(z, Селение_Z), Жители,ОтветZ2),
  74. проверка(7, житель(x, Селение_Х), Жители,ОтветX3),
  75. проверка(8, житель(y, Селение_Y), Жители,ОтветY3),
  76. проверка(9, житель(z, Селение_Z), Жители,ОтветZ3).
  77. GOAL
  78. решение(Живут_в).
W;Test_Goal, pos: 3667, 709 Two free variables in expression E;Test_Goal, pos: 2479, 704 Free variable are not allowed in 'not' or 'retractall' Заранее спасибо)

Решение задачи: «Как исправить ошибку: "Two free variables in expression"?»

textual
Листинг программы
  1.                 not(ответ(6, житель(z, _), Живут_в)),
  2.                 ответ(3, житель(z, _), Живут_в).

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


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

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

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

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

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

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