fork download
  1. % ---------------------------
  2. % Пол
  3. % ---------------------------
  4. мужчина(егор).
  5. мужчина(борис).
  6. мужчина(артём).
  7. мужчина(владимир).
  8. мужчина(григорий).
  9. мужчина(даниил).
  10. мужчина(константин).
  11. мужчина(леонид).
  12. мужчина(максим).
  13. мужчина(никита).
  14.  
  15. женщина(лидия).
  16. женщина(ирина).
  17. женщина(клавдия).
  18. женщина(настя).
  19. женщина(ольга).
  20. женщина(полина).
  21. женщина(раиса).
  22. женщина(светлана).
  23. женщина(таисия).
  24. женщина(уляна).
  25.  
  26. % ---------------------------
  27. % Супруги (взаимные факты)
  28. % ---------------------------
  29. супруг(егор, ирина).
  30. супруг(ирина, егор).
  31. супруг(борис, клавдия).
  32. супруг(клавдия, борис).
  33. супруг(артём, настя).
  34. супруг(настя, артём).
  35. супруг(владимир, ольга).
  36. супруг(ольга, владимир).
  37. супруг(григорий, полина).
  38. супруг(полина, григорий).
  39. супруг(даниил, раиса).
  40. супруг(раиса, даниил).
  41.  
  42. % ---------------------------
  43. % Родитель → ребёнок
  44. % ---------------------------
  45. % Поколение 1 → 2
  46. родитель(егор, борис).
  47. родитель(ирина, борис).
  48. родитель(егор, артём).
  49. родитель(ирина, артём).
  50.  
  51. % Поколение 2 → 3
  52. родитель(борис, владимир).
  53. родитель(клавдия, владимир).
  54. родитель(борис, григорий).
  55. родитель(клавдия, григорий).
  56. родитель(артём, даниил).
  57. родитель(настя, даниил).
  58. родитель(артём, константин).
  59. родитель(настя, константин).
  60.  
  61. % Поколение 3 → 4
  62. родитель(владимир, леонид).
  63. родитель(ольга, леонид).
  64. родитель(владимир, максим).
  65. родитель(ольга, максим).
  66. родитель(григорий, никита).
  67. родитель(полина, никита).
  68. родитель(даниил, светлана).
  69. родитель(раиса, светлана).
  70. родитель(даниил, таисия).
  71. родитель(раиса, таисия).
  72. родитель(константин, уляна).
  73. родитель(лидия, уляна). % Лидия — жена Константина (не указана выше как супруга, добавим)
  74. супруг(константин, лидия).
  75. супруг(лидия, константин).
  76.  
  77. % ---------------------------
  78. % Общие вспомогательные предикаты
  79. % ---------------------------
  80. брат(X, Y) :-
  81. мужчина(X),
  82. родитель(P, X),
  83. родитель(P, Y),
  84. X \= Y.
  85.  
  86. сестра(X, Y) :-
  87. женщина(X),
  88. родитель(P, X),
  89. родитель(P, Y),
  90. X \= Y.
  91.  
  92. % ---------------------------
  93. % Предок (рекурсивно)
  94. % ---------------------------
  95. предок(X, Y) :- родитель(X, Y).
  96. предок(X, Y) :- родитель(X, Z), предок(Z, Y).
  97.  
  98. % ---------------------------
  99. % Стандартные родственные связи
  100. % ---------------------------
  101. % Шурин — брат жены или муж сестры жены
  102. шурин(X, Y) :-
  103. супруг(Y, W),
  104. женщина(W),
  105. брат(X, W).
  106.  
  107. шурин(X, Y) :-
  108. супруг(Y, W),
  109. женщина(W),
  110. сестра(S, W),
  111. супруг(X, S).
  112.  
  113. % Деверь — брат мужа
  114. деверь(X, Y) :-
  115. супруг(Y, M),
  116. мужчина(M),
  117. брат(X, M).
  118.  
  119. % Золовка — сестра мужа
  120. золовка(X, Y) :-
  121. супруг(Y, M),
  122. мужчина(M),
  123. сестра(X, M).
  124.  
  125. % Свояченица — сестра жены
  126. свояченица(X, Y) :-
  127. супруг(Y, W),
  128. женщина(W),
  129. сестра(X, W).
  130.  
  131. % Племянник — сын брата или сестры
  132. племянник(X, Y) :-
  133. мужчина(X),
  134. (брат(B, Y) ; сестра(B, Y)),
  135. родитель(B, X).
  136.  
  137. % Двоюродный племянник — сын двоюродного брата/сестры
  138. двоюродный_племянник(X, Y) :-
  139. мужчина(X),
  140. (двоюродный_брат(B, Y) ; двоюродная_сестра(B, Y)),
  141. родитель(B, X).
  142.  
  143. двоюродный_брат(X, Y) :-
  144. мужчина(X),
  145. родитель(Px, X),
  146. родитель(Py, Y),
  147. (брат(Px, Py) ; сестра(Px, Py)),
  148. X \= Y.
  149.  
  150. двоюродная_сестра(X, Y) :-
  151. женщина(X),
  152. родитель(Px, X),
  153. родитель(Py, Y),
  154. (брат(Px, Py) ; сестра(Px, Py)),
  155. X \= Y.
  156.  
  157. % Тёща — мать жены
  158. тёща(X, Y) :-
  159. супруг(Y, W),
  160. женщина(W),
  161. родитель(X, W),
  162. женщина(X).
  163.  
  164. % Тёсть — отец жены
  165. тесть(X, Y) :-
  166. супруг(Y, W),
  167. женщина(W),
  168. родитель(X, W),
  169. мужчина(X).
  170.  
  171. % Невестка — жена сына
  172. невестка(X, Y) :-
  173. женщина(X),
  174. родитель(Y, S),
  175. мужчина(S),
  176. супруг(S, X).
  177.  
  178. % Зять — муж дочери
  179. зять(X, Y) :-
  180. мужчина(X),
  181. родитель(Y, D),
  182. женщина(D),
  183. супруг(X, D).
  184.  
  185. % ---------------------------
  186. % Архаичные и редкие термины
  187. % ---------------------------
  188.  
  189. % Ятровь — жена деверя (жена брата мужа)
  190. ятровь(X, Y) :-
  191. женщина(X),
  192. супруг(Y, M),
  193. мужчина(M),
  194. брат(B, M),
  195. супруг(B, X).
  196.  
  197. % Стрый — отец отца (прадед по отцовской линии)
  198. стрый(X, Y) :-
  199. родитель(X, P),
  200. родитель(P, Y),
  201. мужчина(X),
  202. мужчина(P).
  203.  
  204. % Уй — сестра отца (тётя по отцу)
  205. уй(X, Y) :-
  206. родитель(P, Y),
  207. мужчина(P),
  208. сестра(X, P).
Success #stdin #stdout #stderr 0.04s 7248KB
stdin
Standard input is empty
stdout
Standard output is empty
stderr
Warning: /home/Yk6ZQy/prog:74:
	Clauses of супруг/2 are not together in the source-file
	  Earlier definition at /home/Yk6ZQy/prog:29
	  Current predicate: родитель/2
	  Use :- discontiguous супруг/2. to suppress this message
ERROR: '$runtoplevel'/0: Undefined procedure: program/0
   Exception: (3) program ? EOF: exit