Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- % FACTS %
- person(albert).
- person(berta).
- person(chris).
- person(detlef).
- person(emma).
- person(felix).
- % HELPER %
- vorsitzender([X,_,_],X).
- stellvertreter([_,X,_],X).
- sekretaer([_,_,X],X).
- teilDerLeitung([X,_,_],X).
- teilDerLeitung([_,X,_],X).
- teilDerLeitung([_,_,X],X).
- vorgesetzter(L,X,Y) :- vorsitzender(L,X),stellvertreter(L,Y).
- vorgesetzter(L,X,Y) :- stellvertreter(L,X),sekretaer(L,Y).
- vorgesetzter(L,X,Y) :- vorsitzender(L,X),sekretaer(L,Y).
- different(X,Y,Z) :- ((X\=Y),(X\=Z),(Y\=Z)). % transitivität y\=z sein
- % RULES %
- %a
- a(L) :- vorsitzender(L,emma);not(teilDerLeitung(L,albert)).
- %b
- b(L) :- not(vorgesetzter(L,berta,chris));not(teilDerLeitung(L,berta)).
- %c
- c(L) :- (not(teilDerLeitung(L,felix));not(teilDerLeitung(L,berta))).
- %d
- d(L) :- not((teilDerLeitung(L,felix),teilDerLeitung(L,emma)));not(teilDerLeitung(L,chris)).
- %e
- e(L) :- not((vorsitzender(L,felix);sekretaer(L,berta)));not(teilDerLeitung(L,chris)).
- %f
- f(L) :- not((vorgesetzter(L,chris,detlef);vorgesetzter(L,emma,detlef)));not(teilDerLeitung(L,detlef)).
- %g
- g(L) :- not(stellvertreter(L,emma)).
- %h
- h(L) :- not(teilDerLeitung(L,detlef));not(sekretaer(L,emma)).
- %i
- i(L) :- teilDerLeitung(L,felix);not((teilDerLeitung(L,emma),teilDerLeitung(L,albert))).
- %j
- j(L) :- not(teilDerLeitung(L,felix));(vorsitzender(L,chris);vorsitzender(L,felix)).
- % TASKS %
- personen([X,Y,Z]) :- (person(X),person(Y),person(Z)).
- pruefe(L) :- personen(L),(a(L),b(L),c(L),d(L),e(L),f(L),g(L),h(L),i(L),j(L)).
- leitung([X,Y,Z]) :- not(pruefe([X,Y,Z]));different(X,Y,Z).
- % TESTS %
- :- begin_tests(test_different).
- test(different_i) :- different(albert,felix,emma),!.
- test(different_ii) :- different(albert,detlef,emma),!.
- test(not_different_i) :- not(different(albert,albert,albert)),!.
- test(not_different_ii) :- not(different(albert,albert,emma)),!.
- test(not_different_iii) :- not(different(emma,albert,albert)),!.
- test(not_different_iiii) :- not(different(albert,emma,albert)),!.
- :- end_tests(test_different).
- :- begin_tests(test_vorsitzender).
- test(vorsitzender_i) :- vorsitzender([emma,albert,felix],emma),!.
- test(not_vorsitzender_i) :- not(vorsitzender([albert,emma,felix],emma)),!.
- :- end_tests(test_vorsitzender).
- :- begin_tests(test_stellvertreter).
- test(stellvertreter_i) :- stellvertreter([albert,emma,felix],emma),!.
- test(not_stellvertreter_i) :- not(stellvertreter([emma,albert,felix],emma)),!.
- :- end_tests(test_stellvertreter).
- :- begin_tests(test_sekretaer).
- test(sekretaer_i) :- sekretaer([albert,felix,emma],emma),!.
- test(not_sekretaer_i) :- not(sekretaer([albert,emma,felix],emma)),!.
- :- end_tests(test_sekretaer).
- :- begin_tests(test_teilDerLeitung).
- test(teilDerLeitung_i) :- teilDerLeitung([emma,berta,chris],emma),!.
- test(teilDerLeitung_ii) :- teilDerLeitung([berta,emma,chris],emma),!.
- test(teilDerLeitung_iii) :- teilDerLeitung([chris,berta,emma],emma),!.
- test(not_teilDerLeitung_i) :- not(teilDerLeitung([emma,berta,chris],albert)),!.
- test(not_teilDerLeitung_ii) :- not(teilDerLeitung([berta,emma,chris],detlef)),!.
- test(not_teilDerLeitung_iii) :- not(teilDerLeitung([chris,berta,emma],felix)),!.
- :- end_tests(test_teilDerLeitung).
- :- begin_tests(test_vorgesetzter).
- test(vorgesetzter_i) :- vorgesetzter([emma,berta,chris],emma,chris),!.
- test(vorgesetzter_ii) :- vorgesetzter([emma,chris,berta],emma,chris),!.
- test(vorgesetzter_iii) :- vorgesetzter([berta,emma,chris],emma,chris),!.
- test(not_vorgesetzter_i) :- not(vorgesetzter([chris,berta,emma],emma,chris)),!.
- test(not_vorgesetzter_ii) :- not(vorgesetzter([chris,emma,berta],emma,chris)),!.
- test(not_vorgesetzter_iii) :- not(vorgesetzter([berta,chris,emma],emma,chris)),!.
- :- end_tests(test_vorgesetzter).
- :- begin_tests(test_a).
- test(a) :- a([emma,albert,felix]),!.
- test(aa) :- a([emma,felix,albert]),!.
- test(a_nobody_in) :- a([detlef,felix,berta]),!.
- test(a_one_in) :- a([emma,detlef,berta]),!.
- test(aa_one_in) :- a([felix,emma,berta]),!.
- test(aaa_one_in) :- a([berta,felix,emma]),!.
- test(not_a) :- not(a([albert,emma,felix])),!.
- test(not_aa) :- not(a([albert,felix,emma])),!.
- test(not_aaa) :- not(a([felix,emma,albert])),!.
- test(not_aaaa) :- not(a([felix,albert,emma])),!.
- :- end_tests(test_a).
- :- begin_tests(test_b).
- test(b) :- b([berta,felix,albert]),!.
- test(bb) :- b([berta,albert,felix]),!.
- test(bbb) :- b([albert,berta,felix]),!.
- test(bbbb) :- b([albert,felix,berta]),!.
- test(bbbbb) :- b([chris,albert,emma]),!.
- test(b_nobody_in) :- b([albert,felix,emma]),!.
- test(not_b) :- not(b([berta,chris,felix])),!.
- test(not_bb) :- not(b([berta,felix,chris])),!.
- test(not_bbb) :- not(b([felix,berta,chris])),!.
- :- end_tests(test_b).
- :- begin_tests(test_c).
- test(c) :- c([berta,albert,detlef]),!.
- test(c_berta_not_in) :- c([detlef,albert,emma]),!.
- test(c_berta_not_in_but_felix) :- c([detlef,felix,emma]),!.
- test(not_c) :- not(c([berta,albert,felix])),!.
- test(not_cc) :- not(c([berta,felix,albert])),!.
- test(not_ccc) :- not(c([felix,berta,albert])),!.
- test(not_cccc) :- not(c([felix,albert,berta])),!.
- test(not_ccccc) :- not(c([albert,berta,felix])),!.
- test(not_cccccc) :- not(c([albert,felix,berta])),!.
- :- end_tests(test_c).
- :- begin_tests(test_d).
- test(d) :- d([emma,felix,albert]),!.
- test(dd) :- d([emma,albert,felix]),!.
- test(ddd) :- d([felix,emma,albert]),!.
- test(dddd) :- d([felix,albert,emma]),!.
- test(ddddd) :- d([albert,felix,emma]),!.
- test(dddddd) :- d([albert,emma,felix]),!.
- test(d_nobody_in) :- d([albert,detlef,berta]),!.
- test(not_d) :- not(d([chris,emma,felix])),!.
- test(not_dd) :- not(d([chris,felix,emma])),!.
- test(not_ddd) :- not(d([felix,chris,emma])),!.
- test(not_dddd) :- not(d([felix,emma,chris])),!.
- test(not_ddddd) :- not(d([emma,chris,felix])),!.
- test(not_dddddd) :- not(d([emma,felix,chris])),!.
- :- end_tests(test_d).
- :- begin_tests(test_e).
- test(e) :- e([chris,berta,felix]),!.
- test(ee) :- e([berta,chris,felix]),!.
- test(e_not_chris_in) :- e([felix,albert,berta]),!.
- test(not_e) :- not(e([felix,berta,chris])),!.
- test(not_ee) :- not(e([felix,chris,berta])),!.
- test(not_eee) :- not(e([chris,felix,berta])),!.
- :- end_tests(test_e).
- :- begin_tests(test_f).
- test(f) :- f([detlef,emma,chris]),!.
- test(ff) :- f([detlef,chris,emma]),!.
- test(f_nobody_in) :- f([felix,berta,berta]]),!.
- test(f_one_in) :- f([felix,detlef,berta]),!.
- test(not_f) :- not(f([chris,detlef,emma])),!.
- test(not_ff) :- not(f([chris,emma,detlef])),!.
- test(not_fff) :- not(f([emma,chris,detlef])),!.
- test(not_ffff) :- not(f([emma,detlef,chris])),!.
- :- end_tests(test_f).
- :- begin_tests(test_g).
- test(g) :- g([emma,felix,albert]),!.
- test(gg) :- g([albert,felix,emma]),!.
- test(ggg) :- g([emma,felix,emma]),!.
- test(not_g) :- not(g([detlef,emma,albert])),!.
- :- end_tests(test_g).
- :- begin_tests(test_h).
- test(h) :- h([albert,felix,emma]),!.
- test(hh) :- h([emma,felix,detlef]),!.
- test(not_h) :- not(h([albert,detlef,emma])),!.
- test(not_hh) :- not(h([detlef,albert,emma])),!.
- :- end_tests(test_h).
- :- begin_tests(test_i).
- test(i) :- i([emma,albert,felix]),!.
- test(ii) :- i([emma,felix,albert]),!.
- test(iii) :- i([felix,emma,albert]),!.
- test(iiii) :- i([felix,albert,emma]),!.
- test(iiiii) :- i([albert,felix,emma]),!.
- test(iiiiii) :- i([albert,emma,felix]),!.
- test(i_nobody_in) :- i([chris,detlef,berta]),!.
- test(i_one_in) :- i([chris,detlef,felix]),!.
- test(not_i) :- not(i([albert,emma,chris])),!.
- test(not_ii) :- not(i([albert,chris,emma])),!.
- test(not_iii) :- not(i([chris,emma,albert])),!.
- test(not_iiii) :- not(i([chris,albert,emma])),!.
- test(not_iiiii) :- not(i([emma,chris,albert])),!.
- test(not_iiiiii) :- not(i([emma,albert,chris])),!.
- :- end_tests(test_i).
- :- begin_tests(test_j).
- test(j) :- j([felix,albert,chris]),!.
- test(jj) :- j([felix,chris,albert]),!.
- test(jjj) :- j([chris,felix,albert]),!.
- test(jjjj) :- j([chris,albert,felix]),!.
- test(j_no_one_in) :- j([berta,albert,emma]),!.
- test(j_only_chris_in) :- j([emma,chris,albert]),!.
- test(not_j) :- not(j([emma,felix,chris])),!.
- test(not_jj) :- not(j([emma,chris,felix])),!.
- :- end_tests(test_j).
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement