В генеалог древе при построении его используя факты отец/2. мать/2. мужчина/1.повторяются решения - Prolog

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

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

Дали вот такое задание на прологе создать генеалогическое дерево обладая следующими фактами отец/2. мать/2. мужчина/1. Больше ничего не дано, сами вычисления различных родственников я написала, но возникает такая проблема при проверки на муж/жена он выводит ровно столько повторяющихся пар сколько в этой паре детей, эта ошибка копиться как снежный ком для связей типа тесть/теща и прочих. Есть предположение, что нужно что то где то резать при помощи !, но все попытки нужного результата не дали. Помогите.
Листинг программы
  1. mother("Kate","Anna").
  2. mother("Kate","Jon").
  3. father("Vlad","Anna").
  4. father("Vlad","Jon").
  5. mother("Anna","Viktor").
  6. mother("Anna","Elena").
  7. mother("Anna","Nady").
  8. father("Bob","Viktor").
  9. father("Bob","Elena").
  10. father("Bob","Nady").
  11. father("Bob","Tan").
  12. father("Bob","Kirill").
  13. mother("Sue","Tan").
  14. mother("Sue","Kirill").
  15. mother("Elena","Adam").
  16. father("Karl","Adam").
  17. mother("Alex","Sofa").
  18. mother("Alex","Robert").
  19. mother("Alex","Stas").
  20. father("Jon","Sofa").
  21. father("Jon","Robert").
  22. father("Jon","Stas").
  23. father("Robert","Svetl").
  24. mother("Yula","Svetl").
  25. father("Robert","Zahar").
  26. mother("Yula","Zahar").
  27. mother("Sofa","Serg").
  28. mother("Sofa","Olga").
  29. father("Dmitry","Serg").
  30. father("Dmitry","Olga").
  31. mother("Sofa","Mary").
  32. father("Grig","Mary").
  33. male("Vlad").
  34. male("Jon").
  35. male("Robert").
  36. male("Viktor").
  37. male("Bob").
  38. male("Karl").
  39. male("Adam").
  40. male("Grig").
  41. male("Zahar").
  42. male("Stas").
  43. male("Kirill").
  44. male("Serg").
  45. male("Dmitry").
  46. sd(X,Y):-mother(Y,X);father(Y,X).
  47. mg(X,Y):-mother(X,Z),father(Y,Z);mother(Y,Z),father(X,Z).
  48. bs(X,Y):-mother(Z1,X),father(Z2,X),mother(Z1,Y),father(Z2,Y),X\=Y.
  49. kz(X,Y):-sd(X,Z1),sd(Y,Z2),bs(Z1,Z2).
  50. dt(X,Y):-sd(Y,Z),bs(X,Z).
  51. plem(X,Y):-dt(Y,X).
  52. vn(X,Y):-sd(X,Z),sd(Z,Y).
  53. db(X,Y):-vn(Y,X).
  54. pvn(X,Y):-vn(X,Z),sd(Z,Y).
  55. pdb(X,Y):-pvn(Y,X).
  56. tstth(X,Y):-male(Y),mg(Y,Z),sd(Z,X).
  57. svsvkr(X,Y):-mg(Y,Z),sd(Z,X),not(male(Y)).
  58. ztnev(X,Y):-mg(X,Z),sd(Z,Y).
  59. shsvy(X,Y):-mg(Y,Z),not(male(Z)),bs(Z,X).
  60. devzol(X,Y):-mg(Y,Z),male(Z),bs(X,Z).
  61. mchotch(X,Y):-sd(Y,Z),mg(X,Z),not(sd(Y,X)).
  62. padpas(X,Y):-mchotch(Y,X).
  63. svbs(X,Y):-padpas(X,Z1),sd(Y,Z1),X\=Y.
  64. edkrbs(X,Y):-mch(Z,X),mother(Z,Y),X\=Y.
  65. edutrbs(X,Y):-otch(Z,X),father(Z,Y),X\=Y.
  66. sun(X,Y):-sd(X,Y),male(X).
  67. douter(X,Y):-sd(X,Y),not(male(X)).
  68. wife(X,Y):-mg(X,Y),not(male(X)).
  69. husband(X,Y):-mg(X,Y),male(X).
  70. brat(X,Y):-bs(X,Y),male(X).
  71. sister(X,Y):-bs(X,Y),not(male(X)).
  72. dvsister(X,Y):-kz(X,Y),not(male(X)).
  73. dvbrat(X,Y):-kz(X,Y),male(X).
  74. dada(X,Y):-dt(X,Y),male(X).
  75. tota(X,Y):-dt(X,Y),not(male(X)).
  76. plemca(X,Y):-plem(X,Y),not(male(X)).
  77. plemk(X,Y):-plem(X,Y),male(X).
  78. vnck(X,Y):-vn(X,Y),not(male(X)).
  79. vnk(X,Y):-vn(X,Y),male(X).
  80. bab(X,Y):-db(X,Y),not(male(X)).
  81. ded(X,Y):-db(X,Y),male(X).
  82. pvnca(X,Y):-pvn(X,Y),not(male(X)).
  83. pvnk(X,Y):-pvn(X,Y),male(X).
  84. pbab(X,Y):-pdb(X,Y),not(male(X)).
  85. pded(X,Y):-pdb(X,Y),male(X).
  86. th(X,Y):-tstth(X,Y),not(male(X)).
  87. tst(X,Y):-tstth(X,Y),male(X).
  88. svkr(X,Y):-svsvkr(X,Y),not(male(X)).
  89. sv(X,Y):-svsvkr(X,Y),male(X).
  90. nev(X,Y):-ztnev(X,Y),not(male(X)).
  91. zt(X,Y):-ztnev(X,Y),male(X).
  92. svy(X,Y):-shsvy(X,Y),not(male(X)).
  93. sh(X,Y):-shsvy(X,Y),male(X).
  94. zol(X,Y):-devzol(X,Y),not(male(X)).
  95. dev(X,Y):-devzol(X,Y),male(X).
  96. mch(X,Y):-mchotch(X,Y),not(male(X)).
  97. otch(X,Y):-mchotch(X,Y),male(X).
  98. pad(X,Y):-padpas(X,Y),not(male(X)).
  99. pas(X,Y):-padpas(X,Y),male(X).
  100. svsis(X,Y):-svbs(X,Y),not(male(X)).
  101. svbr(X,Y):-svbs(X,Y),male(X).
  102. edkrsis(X,Y):-edkrbs(X,Y),not(male(X)).
  103. edkrbr(X,Y):-edkrbs(X,Y),male(X).
  104. edutrsis(X,Y):-edutrbs(X,Y),not(male(X)).
  105. edutrbr(X,Y):-edutrbs(X,Y),male(X).

Решение задачи: «В генеалог древе при построении его используя факты отец/2. мать/2. мужчина/1.повторяются решения»

textual
Листинг программы
  1. get_person3(P1, f), get_person3(P2, m), wife(P1,P2).

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


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

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

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

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

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

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