Advertisement
Guest User

Untitled

a guest
Apr 24th, 2017
67
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Prolog 7.93 KB | None | 0 0
  1. % FACTS %
  2. person(albert).
  3. person(berta).
  4. person(chris).
  5. person(detlef).
  6. person(emma).
  7. person(felix).
  8.  
  9. % HELPER %
  10. vorsitzender([X,_,_],X).
  11. stellvertreter([_,X,_],X).
  12. sekretaer([_,_,X],X).
  13.  
  14. teilDerLeitung([X,_,_],X).
  15. teilDerLeitung([_,X,_],X).
  16. teilDerLeitung([_,_,X],X).
  17.  
  18. vorgesetzter(L,X,Y) :- vorsitzender(L,X),stellvertreter(L,Y).
  19. vorgesetzter(L,X,Y) :- stellvertreter(L,X),sekretaer(L,Y).
  20. vorgesetzter(L,X,Y) :- vorsitzender(L,X),sekretaer(L,Y).
  21.  
  22. different(X,Y,Z) :- ((X\=Y),(X\=Z),(Y\=Z)). % transitivität y\=z sein
  23.    
  24.  
  25. % RULES %
  26.  
  27. %a
  28. a(L) :- vorsitzender(L,emma);not(teilDerLeitung(L,albert)).
  29.  
  30. %b
  31. b(L) :- not(vorgesetzter(L,berta,chris));not(teilDerLeitung(L,berta)).
  32.  
  33. %c
  34. c(L) :- (not(teilDerLeitung(L,felix));not(teilDerLeitung(L,berta))).
  35.  
  36. %d
  37. d(L) :- not((teilDerLeitung(L,felix),teilDerLeitung(L,emma)));not(teilDerLeitung(L,chris)).
  38.  
  39. %e
  40. e(L) :- not((vorsitzender(L,felix);sekretaer(L,berta)));not(teilDerLeitung(L,chris)).
  41.  
  42. %f
  43. f(L) :- not((vorgesetzter(L,chris,detlef);vorgesetzter(L,emma,detlef)));not(teilDerLeitung(L,detlef)).
  44.  
  45. %g
  46. g(L) :- not(stellvertreter(L,emma)).
  47.  
  48. %h
  49. h(L) :- not(teilDerLeitung(L,detlef));not(sekretaer(L,emma)).
  50.  
  51. %i
  52. i(L) :- teilDerLeitung(L,felix);not((teilDerLeitung(L,emma),teilDerLeitung(L,albert))).
  53.  
  54. %j
  55. j(L) :- not(teilDerLeitung(L,felix));(vorsitzender(L,chris);vorsitzender(L,felix)).
  56.  
  57. % TASKS %
  58. personen([X,Y,Z]) :- (person(X),person(Y),person(Z)).
  59. pruefe(L) :- personen(L),(a(L),b(L),c(L),d(L),e(L),f(L),g(L),h(L),i(L),j(L)).
  60. leitung([X,Y,Z]) :- not(pruefe([X,Y,Z]));different(X,Y,Z).
  61.  
  62.  
  63. % TESTS %
  64. :- begin_tests(test_different).
  65. test(different_i) :- different(albert,felix,emma),!.
  66. test(different_ii) :- different(albert,detlef,emma),!.
  67. test(not_different_i) :- not(different(albert,albert,albert)),!.
  68. test(not_different_ii) :- not(different(albert,albert,emma)),!.
  69. test(not_different_iii) :- not(different(emma,albert,albert)),!.
  70. test(not_different_iiii) :- not(different(albert,emma,albert)),!.
  71. :- end_tests(test_different).
  72.  
  73. :- begin_tests(test_vorsitzender).
  74. test(vorsitzender_i) :- vorsitzender([emma,albert,felix],emma),!.
  75. test(not_vorsitzender_i) :- not(vorsitzender([albert,emma,felix],emma)),!.
  76. :- end_tests(test_vorsitzender).
  77.  
  78. :- begin_tests(test_stellvertreter).
  79. test(stellvertreter_i) :- stellvertreter([albert,emma,felix],emma),!.
  80. test(not_stellvertreter_i) :- not(stellvertreter([emma,albert,felix],emma)),!.
  81. :- end_tests(test_stellvertreter).
  82.  
  83. :- begin_tests(test_sekretaer).
  84. test(sekretaer_i) :- sekretaer([albert,felix,emma],emma),!.
  85. test(not_sekretaer_i) :- not(sekretaer([albert,emma,felix],emma)),!.
  86. :- end_tests(test_sekretaer).
  87.  
  88. :- begin_tests(test_teilDerLeitung).
  89. test(teilDerLeitung_i) :- teilDerLeitung([emma,berta,chris],emma),!.
  90. test(teilDerLeitung_ii) :- teilDerLeitung([berta,emma,chris],emma),!.
  91. test(teilDerLeitung_iii) :- teilDerLeitung([chris,berta,emma],emma),!.
  92. test(not_teilDerLeitung_i) :- not(teilDerLeitung([emma,berta,chris],albert)),!.
  93. test(not_teilDerLeitung_ii) :- not(teilDerLeitung([berta,emma,chris],detlef)),!.
  94. test(not_teilDerLeitung_iii) :- not(teilDerLeitung([chris,berta,emma],felix)),!.
  95. :- end_tests(test_teilDerLeitung).
  96.  
  97. :- begin_tests(test_vorgesetzter).
  98. test(vorgesetzter_i) :- vorgesetzter([emma,berta,chris],emma,chris),!.
  99. test(vorgesetzter_ii) :- vorgesetzter([emma,chris,berta],emma,chris),!.
  100. test(vorgesetzter_iii) :- vorgesetzter([berta,emma,chris],emma,chris),!.
  101. test(not_vorgesetzter_i) :- not(vorgesetzter([chris,berta,emma],emma,chris)),!.
  102. test(not_vorgesetzter_ii) :- not(vorgesetzter([chris,emma,berta],emma,chris)),!.
  103. test(not_vorgesetzter_iii) :- not(vorgesetzter([berta,chris,emma],emma,chris)),!.
  104. :- end_tests(test_vorgesetzter).
  105.  
  106. :- begin_tests(test_a).
  107. test(a) :- a([emma,albert,felix]),!.
  108. test(aa) :- a([emma,felix,albert]),!.
  109. test(a_nobody_in) :- a([detlef,felix,berta]),!.
  110. test(a_one_in) :- a([emma,detlef,berta]),!.
  111. test(aa_one_in) :- a([felix,emma,berta]),!.
  112. test(aaa_one_in) :- a([berta,felix,emma]),!.
  113. test(not_a) :- not(a([albert,emma,felix])),!.
  114. test(not_aa) :- not(a([albert,felix,emma])),!.
  115. test(not_aaa) :- not(a([felix,emma,albert])),!.
  116. test(not_aaaa) :- not(a([felix,albert,emma])),!.
  117. :- end_tests(test_a).
  118.  
  119. :- begin_tests(test_b).
  120. test(b) :- b([berta,felix,albert]),!.
  121. test(bb) :- b([berta,albert,felix]),!.
  122. test(bbb) :- b([albert,berta,felix]),!.
  123. test(bbbb) :- b([albert,felix,berta]),!.
  124.  
  125. test(bbbbb) :- b([chris,albert,emma]),!.
  126. test(b_nobody_in) :- b([albert,felix,emma]),!.
  127. test(not_b) :- not(b([berta,chris,felix])),!.
  128. test(not_bb) :- not(b([berta,felix,chris])),!.
  129. test(not_bbb) :- not(b([felix,berta,chris])),!.
  130. :- end_tests(test_b).
  131.  
  132. :- begin_tests(test_c).
  133. test(c) :- c([berta,albert,detlef]),!.
  134. test(c_berta_not_in) :- c([detlef,albert,emma]),!.
  135. test(c_berta_not_in_but_felix) :- c([detlef,felix,emma]),!.
  136. test(not_c) :- not(c([berta,albert,felix])),!.
  137. test(not_cc) :- not(c([berta,felix,albert])),!.
  138. test(not_ccc) :- not(c([felix,berta,albert])),!.
  139. test(not_cccc) :- not(c([felix,albert,berta])),!.
  140. test(not_ccccc) :- not(c([albert,berta,felix])),!.
  141. test(not_cccccc) :- not(c([albert,felix,berta])),!.
  142. :- end_tests(test_c).
  143.  
  144. :- begin_tests(test_d).
  145. test(d) :- d([emma,felix,albert]),!.
  146. test(dd) :- d([emma,albert,felix]),!.
  147. test(ddd) :- d([felix,emma,albert]),!.
  148. test(dddd) :- d([felix,albert,emma]),!.
  149. test(ddddd) :- d([albert,felix,emma]),!.
  150. test(dddddd) :- d([albert,emma,felix]),!.
  151.  
  152. test(d_nobody_in) :- d([albert,detlef,berta]),!.
  153.  
  154. test(not_d) :- not(d([chris,emma,felix])),!.
  155. test(not_dd) :- not(d([chris,felix,emma])),!.
  156. test(not_ddd) :- not(d([felix,chris,emma])),!.
  157. test(not_dddd) :- not(d([felix,emma,chris])),!.
  158. test(not_ddddd) :- not(d([emma,chris,felix])),!.
  159. test(not_dddddd) :- not(d([emma,felix,chris])),!.
  160.  
  161. :- end_tests(test_d).
  162.  
  163. :- begin_tests(test_e).
  164. test(e) :- e([chris,berta,felix]),!.
  165. test(ee) :- e([berta,chris,felix]),!.
  166. test(e_not_chris_in) :- e([felix,albert,berta]),!.
  167. test(not_e) :- not(e([felix,berta,chris])),!.
  168. test(not_ee) :- not(e([felix,chris,berta])),!.
  169. test(not_eee) :- not(e([chris,felix,berta])),!.
  170. :- end_tests(test_e).
  171.  
  172. :- begin_tests(test_f).
  173. test(f) :- f([detlef,emma,chris]),!.
  174. test(ff) :- f([detlef,chris,emma]),!.
  175. test(f_nobody_in) :- f([felix,berta,berta]]),!.
  176. test(f_one_in) :- f([felix,detlef,berta]),!.
  177. test(not_f) :- not(f([chris,detlef,emma])),!.
  178. test(not_ff) :- not(f([chris,emma,detlef])),!.
  179. test(not_fff) :- not(f([emma,chris,detlef])),!.
  180. test(not_ffff) :- not(f([emma,detlef,chris])),!.
  181. :- end_tests(test_f).
  182.  
  183. :- begin_tests(test_g).
  184. test(g) :- g([emma,felix,albert]),!.
  185. test(gg) :- g([albert,felix,emma]),!.
  186. test(ggg) :- g([emma,felix,emma]),!.
  187. test(not_g) :- not(g([detlef,emma,albert])),!.
  188. :- end_tests(test_g).
  189.  
  190. :- begin_tests(test_h).
  191. test(h) :- h([albert,felix,emma]),!.
  192. test(hh) :- h([emma,felix,detlef]),!.
  193. test(not_h) :- not(h([albert,detlef,emma])),!.
  194. test(not_hh) :- not(h([detlef,albert,emma])),!.
  195. :- end_tests(test_h).
  196.  
  197. :- begin_tests(test_i).
  198. test(i) :- i([emma,albert,felix]),!.
  199. test(ii) :- i([emma,felix,albert]),!.
  200. test(iii) :- i([felix,emma,albert]),!.
  201. test(iiii) :- i([felix,albert,emma]),!.
  202. test(iiiii) :- i([albert,felix,emma]),!.
  203. test(iiiiii) :- i([albert,emma,felix]),!.
  204. test(i_nobody_in) :- i([chris,detlef,berta]),!.
  205. test(i_one_in) :- i([chris,detlef,felix]),!.
  206. test(not_i) :- not(i([albert,emma,chris])),!.
  207. test(not_ii) :- not(i([albert,chris,emma])),!.
  208. test(not_iii) :- not(i([chris,emma,albert])),!.
  209. test(not_iiii) :- not(i([chris,albert,emma])),!.
  210. test(not_iiiii) :- not(i([emma,chris,albert])),!.
  211. test(not_iiiiii) :- not(i([emma,albert,chris])),!.
  212. :- end_tests(test_i).
  213.  
  214. :- begin_tests(test_j).
  215. test(j) :- j([felix,albert,chris]),!.
  216. test(jj) :- j([felix,chris,albert]),!.
  217. test(jjj) :- j([chris,felix,albert]),!.
  218. test(jjjj) :- j([chris,albert,felix]),!.
  219. test(j_no_one_in) :- j([berta,albert,emma]),!.
  220. test(j_only_chris_in) :- j([emma,chris,albert]),!.
  221. test(not_j) :- not(j([emma,felix,chris])),!.
  222. test(not_jj) :- not(j([emma,chris,felix])),!.
  223. :- end_tests(test_j).
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement