Advertisement
lossyy

Untitled

May 11th, 2021
317
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 7.97 KB | None | 0 0
  1. clauses
  2. person("Judith",female()).
  3. person("Bill",male()).
  4. person("John",male()).
  5. person("Pam",female()).
  6. parent("John","Judith").
  7. parent("Bill","John").
  8. parent("Pam","Bill").
  9.  
  10. implement main
  11. open core
  12.  
  13. domains
  14. gender = female; male.
  15.  
  16. class facts - familyDB
  17. person : (string Name, gender Gender).
  18. parent : (string Person, string Parent).
  19.  
  20. class predicates
  21. brother : (string X, string Y) nondeterm anyflow.
  22. clauses
  23. brother(X, Y) :-
  24. parent(X, Z),
  25. parent(Y, Z),
  26. person(Y, male()),
  27. Y <> X.
  28.  
  29. class predicates
  30. cousin : (string X, string Y) nondeterm anyflow. %y - двоюродный брат
  31. clauses
  32. cousin(X, Y) :-
  33. parent(X, Z),
  34. parent(Y, G),
  35. parent(Z, F),
  36. parent(G, F),
  37. Z <> G,
  38. person(Y, male()),
  39. Y <> X.
  40.  
  41. class predicates
  42. cousine : (string X, string Y) nondeterm anyflow. %y - двоюродная сестра
  43. clauses
  44. cousine(X, Y) :-
  45. parent(X, Z),
  46. parent(Y, G),
  47. parent(Z, F),
  48. parent(G, F),
  49. Z <> G,
  50. person(Y, female()),
  51. Y <> X.
  52.  
  53. class predicates
  54. uncle : (string X, string Y) nondeterm anyflow. %y - дядя
  55. clauses
  56. uncle(X, Y) :-
  57. parent(Y, F),
  58. parent(Z, F),
  59. parent(X, Z),
  60. not(parent(X, Y)),
  61. person(Y, male()).
  62.  
  63. class predicates
  64. nephew : (string X, string Y) nondeterm anyflow. %y - племянник
  65. clauses
  66. nephew(X, Y) :-
  67. parent(X, Z),
  68. parent(F, Z),
  69. X <> F,
  70. parent(Y, F),
  71. person(Y, male()).
  72.  
  73. class predicates
  74. grandnephew : (string X, string Y) nondeterm anyflow. %y - внучатый племянник
  75. clauses
  76. grandnephew(X, Y) :-
  77. parent(X, Z),
  78. parent(F, Z),
  79. X <> F,
  80. parent(G, F),
  81. parent(Y, G),
  82. person(Y, male()).
  83.  
  84. class predicates
  85. grandson : (string X, string Y) nondeterm anyflow. %y - внук
  86. clauses
  87. grandson(X, Y) :-
  88. parent(Z, X),
  89. parent(Y, Z),
  90. person(Y, male()).
  91.  
  92. class predicates
  93. aunt : (string X, string Y) nondeterm anyflow. %y - тётя
  94. clauses
  95. aunt(X, Y) :-
  96. parent(Y, F),
  97. parent(Z, F),
  98. parent(X, Z),
  99. not(parent(X, Y)),
  100. person(Y, female()).
  101.  
  102. class predicates
  103. niece : (string X, string Y) nondeterm anyflow. %y - племянница
  104. clauses
  105. niece(X, Y) :-
  106. parent(X, Z),
  107. parent(F, Z),
  108. X <> F,
  109. parent(Y, F),
  110. person(Y, female()).
  111.  
  112. class predicates
  113. grandniece : (string X, string Y) nondeterm anyflow. %y - внучатая племянница
  114. clauses
  115. grandniece(X, Y) :-
  116. parent(X, Z),
  117. parent(F, Z),
  118. X <> F,
  119. parent(G, F),
  120. parent(Y, G),
  121. person(Y, female()).
  122.  
  123. class predicates
  124. granddaughter : (string X, string Y) nondeterm anyflow. %y - внучка
  125. clauses
  126. granddaughter(X, Y) :-
  127. parent(Z, X),
  128. parent(Y, Z),
  129. person(Y, female()).
  130.  
  131. class predicates
  132. sister : (string X, string Y) nondeterm anyflow.
  133. clauses
  134. sister(X, Y) :-
  135. parent(X, Z),
  136. parent(Y, Z),
  137. person(Y, female()),
  138. X <> Y.
  139.  
  140. class predicates
  141. father : (string Person, string Father) nondeterm anyflow.
  142. clauses
  143. father(Person, Father) :-
  144. parent(Person, Father),
  145. person(Father, male()).
  146.  
  147. class predicates
  148. grandFather : (string Person, string GrandFather) nondeterm anyflow.
  149. clauses
  150. grandFather(Person, GrandFather) :-
  151. parent(Person, Parent),
  152. father(Parent, GrandFather).
  153.  
  154. class predicates
  155. mother : (string Person, string Mother) nondeterm anyflow.
  156. clauses
  157. mother(Person, Mother) :-
  158. parent(Person, Mother),
  159. person(Mother, female()).
  160.  
  161. class predicates
  162. grandMother : (string Person, string GrandMother) nondeterm anyflow.
  163. clauses
  164. grandMother(Person, GrandMother) :-
  165. parent(Person, Parent),
  166. mother(Parent, GrandMother).
  167.  
  168. class predicates
  169. ancestor : (string Person, string Ancestor) nondeterm anyflow.
  170. clauses
  171. ancestor(Person, Ancestor) :-
  172. parent(Person, Ancestor).
  173. ancestor(Person, Ancestor) :-
  174. parent(Person, P1),
  175. ancestor(P1, Ancestor).
  176.  
  177. class predicates
  178. reconsult : (string FileName).
  179. clauses
  180. reconsult(FileName) :-
  181. retractFactDB(familyDB),
  182. file::consult(FileName, familyDB).
  183.  
  184. clauses
  185. run() :-
  186. console::init(),
  187. stdIO::write("Load data\n"),
  188. reconsult("fa.txt"),
  189. stdIO::write("\nТест на отцов\n"),
  190. father(X, Y),
  191. stdIO::writef("% является отцом %\n", Y, X),
  192. fail.
  193.  
  194. run() :-
  195. stdIO::write("\nТест на матерей\n"),
  196. mother(X, Y),
  197. stdIO::writef("% является матерью %\n", Y, X),
  198. fail.
  199.  
  200. run() :-
  201. stdIO::write("\nТест на братьев\n"),
  202. brother(X, Y),
  203. stdIO::writef("% является братом %\n", Y, X),
  204. fail.
  205.  
  206. run() :-
  207. stdIO::write("\nТест на двоюродных братьев\n"),
  208. cousin(X, Y),
  209. stdIO::writef("% является двоюродным братом %\n", Y, X),
  210. fail.
  211.  
  212. run() :-
  213. stdIO::write("\nТест на сестер\n"),
  214. sister(X, Y),
  215. stdIO::writef("% является сестрой %\n", Y, X),
  216. fail.
  217.  
  218. run() :-
  219. stdIO::write("\nТест на двоюродных сестер\n"),
  220. cousine(X, Y),
  221. stdIO::writef("% является двоюродной сестрой %\n", Y, X),
  222. fail.
  223.  
  224. run() :-
  225. stdIO::write("\nТест на дядей\n"),
  226. uncle(X, Y),
  227. stdIO::writef("% является дядей %\n", Y, X),
  228. fail.
  229.  
  230. run() :-
  231. stdIO::write("\nТест на племянников\n"),
  232. nephew(X, Y),
  233. stdIO::writef("% является племянником %\n", Y, X),
  234. fail.
  235.  
  236. run() :-
  237. stdIO::write("\nТест на внучатых племянников\n"),
  238. grandnephew(X, Y),
  239. stdIO::writef("% является внучатым племянником %\n", Y, X),
  240. fail.
  241.  
  242. run() :-
  243. stdIO::write("\nТест на внуков\n"),
  244. grandson(X, Y),
  245. stdIO::writef("% является внуком %\n", Y, X),
  246. fail.
  247.  
  248. run() :-
  249. stdIO::write("\nТест на дедушек\n"),
  250. grandFather(X, Y),
  251. stdIO::writef("% является дедушкой %\n", Y, X),
  252. fail.
  253.  
  254. run() :-
  255. stdIO::write("\nТест на бабушек\n"),
  256. grandMother(X, Y),
  257. stdIO::writef("% является бабушкой %\n", Y, X),
  258. fail.
  259.  
  260. run() :-
  261. stdIO::write("\nТест на тёть\n"),
  262. aunt(X, Y),
  263. stdIO::writef("% является тётей %\n", Y, X),
  264. fail.
  265.  
  266. run() :-
  267. stdIO::write("\nТест на племянниц\n"),
  268. niece(X, Y),
  269. stdIO::writef("% является племянницей %\n", Y, X),
  270. fail.
  271.  
  272. run() :-
  273. stdIO::write("\nТест на внучатая племянница\n"),
  274. grandniece(X, Y),
  275. stdIO::writef("% является внучатой племянницой %\n", Y, X),
  276. fail.
  277.  
  278. run() :-
  279. stdIO::write("\nТест на внучек\n"),
  280. granddaughter(X, Y),
  281. stdIO::writef("% является внучкой %\n", Y, X),
  282. fail.
  283.  
  284. run() :-
  285. X = "Pam",
  286. stdIO::writef("\nТест на предков %\n", X),
  287. ancestor(X, Y),
  288. stdIO::writef("% является предком %\n", Y, X),
  289. fail.
  290.  
  291. run() :-
  292. stdIO::write("Конец теста\n").
  293.  
  294. end implement main
  295.  
  296. goal
  297. mainExe::run(main::run).
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement