Advertisement
Guest User

Untitled

a guest
Apr 8th, 2019
177
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Prolog 10.44 KB | None | 0 0
  1. % elternteil/2
  2. % elternteil(X,Y), X ist Elternteil (Mutter/Vater) von Y
  3. % Ebene 2
  4. elternteil(alois,udo).
  5. elternteil(alois,heinz).
  6. elternteil(thea,udo).
  7. elternteil(thea,heinz).
  8. elternteil(anton,hugo).
  9. elternteil(anton,lutz).
  10. elternteil(anton,steffi).
  11. elternteil(magda,hugo).
  12. elternteil(magda,lutz).
  13. elternteil(magda,steffi).
  14. elternteil(fritz,ulrich).
  15. elternteil(fritz,susanne).
  16. elternteil(fritz,lena).
  17. elternteil(ulrike,ulrich).
  18. elternteil(ulrike,susanne).
  19. elternteil(ulrike,lena).
  20. elternteil(jakob,bert).
  21. elternteil(jakob,christa).
  22. elternteil(jakob,isolde).
  23. elternteil(elsa,bert).
  24. elternteil(elsa,christa).
  25. elternteil(elsa,isolde).
  26. elternteil(jens,elke).
  27. elternteil(jens,helga).
  28. elternteil(jens,erika).
  29. elternteil(anna,elke).
  30. elternteil(anna,helga).
  31. elternteil(anna,erika).
  32. % Ebene 3
  33. elternteil(gunter,ulrike).
  34. elternteil(gunter,jakob).
  35. elternteil(klara,ulrike).
  36. elternteil(klara,jakob).
  37. elternteil(manfred,thea).
  38. elternteil(manfred,elsa).
  39. elternteil(manfred,anton).
  40. elternteil(helen,thea).
  41. elternteil(helen,elsa).
  42. elternteil(helen,anton).
  43. elternteil(otto,alois).
  44. elternteil(otto,fritz).
  45. elternteil(otto,jens).
  46. elternteil(lisa,alois).
  47. elternteil(lisa,fritz).
  48. elternteil(lisa,jens).
  49. elternteil(xaver,anna).
  50. elternteil(xaver,magda).
  51. elternteil(vera,anna).
  52. elternteil(vera,magda).
  53. elternteil(elmo,kruemmel).
  54. % Ebene 4
  55. elternteil(dieter,lisa).
  56. elternteil(ruth,lisa).
  57. elternteil(helmut,xaver).
  58. elternteil(renate,xaver).
  59. elternteil(herbert,otto).
  60. elternteil(maria,otto).
  61. elternteil(hubert,helen).
  62. elternteil(johanna,helen).
  63. elternteil(karl,manfred).
  64. elternteil(inge,manfred).
  65. elternteil(siegfried,vera).
  66. elternteil(krimhild,vera).
  67. % Ebene 5
  68. elternteil(wall-e,dieter).
  69. elternteil(wall-e,ruth).
  70. elternteil(wall-e,gunter).
  71. elternteil(wall-e,klara).
  72. elternteil(wall-e,helmut).
  73. elternteil(wall-e,renate).
  74. elternteil(wall-e,herbert).
  75. elternteil(wall-e,maria).
  76. elternteil(wall-e,hubert).
  77. elternteil(wall-e,johanna).
  78. elternteil(wall-e,karl).
  79. elternteil(wall-e,inge).
  80. elternteil(wall-e,pablo).
  81. elternteil(wall-e,marion).
  82. elternteil(wall-e,siegfried).
  83. elternteil(wall-e,krimhild).
  84. elternteil(eve,dieter).
  85. elternteil(eve,ruth).
  86. elternteil(eve,gunter).
  87. elternteil(eve,klara).
  88. elternteil(eve,helmut).
  89. elternteil(eve,renate).
  90. elternteil(eve,herbert).
  91. elternteil(eve,maria).
  92. elternteil(eve,hubert).
  93. elternteil(eve,johanna).
  94. elternteil(eve,karl).
  95. elternteil(eve,inge).
  96. elternteil(eve,pablo).
  97. elternteil(eve,marion).
  98. elternteil(eve,siegfried).
  99. elternteil(eve,krimhild).
  100.  
  101.  
  102. % verheiratet/2
  103. % verheiratet(X,Y), maennlich X ist mit weiblich Y verheiratet
  104. verheiratet(alois,thea).
  105. verheiratet(anton,magda).
  106. verheiratet(dieter,ruth).
  107. verheiratet(fritz,ulrike).
  108. verheiratet(gunter,klara).
  109. verheiratet(helmut,renate).
  110. verheiratet(herbert,maria).
  111. verheiratet(hubert,johanna).
  112. verheiratet(jakob,elsa).
  113. verheiratet(jens,anna).
  114. verheiratet(karl,inge).
  115. verheiratet(manfred,helen).
  116. verheiratet(otto,lisa).
  117. verheiratet(pablo,marion).
  118. verheiratet(siegfried,krimhild).
  119. verheiratet(helge,elisa).
  120. verheiratet(wall-e,eve).
  121. verheiratet(xaver,vera).
  122.  
  123. % weiblich/1
  124. % Frauen
  125. weiblich(anna).
  126. weiblich(christa).
  127. weiblich(elke).
  128. weiblich(elsa).
  129. weiblich(erika).
  130. weiblich(eve).
  131. weiblich(helen).
  132. weiblich(helga).
  133. weiblich(helge).
  134. weiblich(inge).
  135. weiblich(isolde).
  136. weiblich(johanna).
  137. weiblich(klara).
  138. weiblich(krimhild).
  139. weiblich(lena).
  140. weiblich(lisa).
  141. weiblich(magda).
  142. weiblich(maria).
  143. weiblich(marion).
  144. weiblich(renate).
  145. weiblich(ruth).
  146. weiblich(steffi).
  147. weiblich(susanne).
  148. weiblich(thea).
  149. weiblich(ulrike).
  150. weiblich(vera).
  151. weiblich(zummsel).
  152.  
  153. % maennlich/1
  154. % Maenner
  155. maennlich(alois).
  156. maennlich(anton).
  157. maennlich(bert).
  158. maennlich(dieter).
  159. maennlich(elisa).
  160. maennlich(fritz).
  161. maennlich(gunter).
  162. maennlich(heinz).
  163. maennlich(helmut).
  164. maennlich(herbert).
  165. maennlich(hubert).
  166. maennlich(hugo).
  167. maennlich(jakob).
  168. maennlich(jens).
  169. maennlich(karl).
  170. maennlich(lutz).
  171. maennlich(manfred).
  172. maennlich(otto).
  173. maennlich(pablo).
  174. maennlich(siegfried).
  175. maennlich(udo).
  176. maennlich(ulrich).
  177. maennlich(wall-e).
  178. maennlich(xaver).
  179. maennlich(zummsel).
  180.  
  181. vorfahre(X,Y) :- elternteil(X,Y).
  182. vorfahre(X,Y) :-
  183.     elternteil(X,Z),
  184.     vorfahre(Z,Y).
  185.  
  186. nachkomme(X,Y) :- elternteil(Y,X).
  187. nachkomme(X,Y) :-
  188.     elternteil(Z,X),
  189.     nachkomme(Z,Y).
  190.  
  191. nachkommen(X,Y) :-
  192.     findall(Z, nachkomme(Z,X),Z),
  193.     list_to_set(Z, Y).
  194.  
  195.  
  196. eheleute(X, Y) :-
  197.     verheiratet(X, Y).
  198. eheleute(X, Y) :-
  199.     verheiratet(Y, X).
  200.  
  201. kind(X, Y) :-
  202.     elternteil(Y, X).
  203.  
  204. geschwister(X, Y) :-
  205.     kind(X, Z),
  206.     kind(Y, Z),
  207.     Y \== X.
  208.  
  209. bruder(X, Y) :-
  210.     geschwister(X, Y),
  211.     maennlich(X).
  212.  
  213. schwester(X, Y) :-
  214.     geschwister(X, Y),
  215.     weiblich(X).
  216.  
  217. vater(X, Y) :-
  218.     elternteil(X, Y),
  219.     maennlich(X).
  220.  
  221. mutter(X, Y) :-
  222.     elternteil(X, Y),
  223.     weiblich(X).
  224.  
  225. onkel(X, Y) :-
  226.     elternteil(Z, Y),
  227.     bruder(X, Z).
  228.  
  229. tante(X, Y) :-
  230.     elternteil(Z, Y),
  231.     schwester(X, Z).
  232.  
  233. großeltern(X, Y) :-
  234.     elternteil(Z, Y),
  235.     elternteil(X, Z).
  236.  
  237. opa(X, Y) :-
  238.     großeltern(X, Y),
  239.     maennlich(X).
  240.  
  241. oma(X, Y) :-
  242.     großeltern(X, Y),
  243.     weiblich(X).
  244.  
  245. uroma(X, Y) :-
  246.     großeltern(Z, Y),
  247.     mutter(X, Z).
  248.  
  249. uropa(X, Y) :-
  250.     großeltern(Z, Y),
  251.     vater(X, Z).
  252.  
  253. maenUweibl(List) :-
  254.     findall(X, (maennlich(X), weiblich(X)), List).
  255.  
  256. verhKor(List) :-
  257.     findall((X, Y), (verheiratet(X, Y),(maennlich(Y) ; weiblich(X))), Dup), list_to_set(Dup, List).
  258.  
  259. reg(X) :-
  260.     \+ maennlich(X),
  261.     \+ weiblich(X).
  262.  
  263.  
  264. elterVoll(List) :-
  265.     findall((X, Y), (elternteil(X, Y), reg(X), reg(Y)), List).
  266.  
  267. wurzel_w(X) :-
  268.     weiblich(X),
  269.     \+ kind(X, _).
  270.  
  271. wurzel_m(X) :-
  272.     maennlich(X),
  273.     \+ kind(X, _).
  274.  
  275. wurzel(List) :-
  276.     findall(X, (wurzel_m(X) ; wurzel_w(X)), List).
  277.  
  278.  
  279.  
  280. test(nachkomme) :-
  281.     %positiv
  282.     write('nachkomme +'),
  283.     nachkomme(helga,eve), write('.'),!,
  284.     nachkomme(susanne,klara),
  285.     %negativ
  286.     write('. -'),!,
  287.     \+ nachkomme(helga,marion), write('.'),!,
  288.     \+ nachkomme(kruemmel,klara),!, writeln('ok').
  289.  
  290. test(vorfahre) :-
  291.     %positiv
  292.     write('vorfahre +'),
  293.     vorfahre(eve,helga), write('.'),!,
  294.     vorfahre(klara,susanne),
  295.     %negativ
  296.     write('. -'),!,
  297.     \+ vorfahre(marion,helga), write('.'),!,
  298.     \+ vorfahre(klara,kruemmel),!, writeln('ok').
  299.  
  300. test(nachkommen) :-
  301.     %positiv
  302.     write('nachkommen +'),
  303.     nachkommen(eve,Nachommen), write('.'),!,
  304.     length(Nachommen,46), write('.'),!,
  305.     member(vera,Nachommen), write('.'),!,
  306.     member(bert,Nachommen), write('.'),!,
  307.     nachkommen(bert,[]),
  308.     %negativ
  309.     write('. -'),!,
  310.     \+ length(Nachommen,164), write('.'),!,
  311.     \+ member(kruemmel,Nachommen), write('.'),!,
  312.     \+ nachkommen(elke,[_X|_Y]),!, writeln('ok').
  313.  
  314. test(geschwister) :-
  315.     %positiv
  316.     write('geschwister +'),
  317.     geschwister(herbert,johanna), write('.'),!,
  318.     geschwister(elsa,anton),
  319.     %negativ
  320.     write('. -'),!,
  321.     \+ geschwister(udo,thea), write('.'),!,
  322.     \+ geschwister(elmo,kruemmel),!, writeln('ok').
  323.  
  324. test(bruder) :-
  325.     %positiv
  326.     write('bruder +'),
  327.     bruder(hubert,karl), write('.'),!,
  328.     bruder(hubert,inge),
  329.     %negativ
  330.     write('. -'),!,
  331.     \+ bruder(manfred,otto), write('.'),!,
  332.     \+ bruder(thea,anton),!, writeln('ok').
  333.  
  334. test(schwester) :-
  335.     %positiv
  336.     write('schwester +'),
  337.     schwester(inge,johanna), write('.'),!,
  338.     schwester(inge,hubert),
  339.     %negativ
  340.     write('. -'),!,
  341.     \+ schwester(hubert,inge), write('.'),!,
  342.     \+ schwester(lisa,klara),!, writeln('ok').
  343.  
  344. test(eheleute) :-
  345.     %positiv
  346.     write('eheleute +'),
  347.     eheleute(xaver,vera), write('.'),!,
  348.     eheleute(lisa,otto),
  349.     %negativ
  350.     write('. -'),!,
  351.     \+ eheleute(xaver,xaver), write('.'),!,
  352.     \+ eheleute(otto,helen), write('.'),!,
  353.     \+ eheleute(helen,otto),!, writeln('ok').
  354.  
  355. test(onkel) :-
  356.     %positiv
  357.     write('onkel +'),
  358.     onkel(dieter,otto), write('.'),!,
  359.     onkel(anton,christa), write('.'),!,
  360.     onkel(helmut,helen),
  361.     %negativ
  362.     write('. -'),!,
  363.     \+ onkel(wall-e,alois), write('.'),!,
  364.     \+ onkel(ulrike,christa), write('.'),!,
  365.     \+ onkel(alois,hugo),!, writeln('ok').
  366.  
  367.  test(tante) :-
  368.     %positiv
  369.     write('tante +'),
  370.     tante(renate,otto), write('.'),!,
  371.     tante(ulrike,christa), write('.'),!,
  372.     tante(johanna,helen),
  373.     %negativ
  374.     write('. -'),!,
  375.     \+ tante(eve,alois), write('.'),!,
  376.     \+ tante(anton,christa), write('.'),!,
  377.     \+ tante(thea,susanne),!, writeln('ok').
  378.  
  379. test(oma) :-
  380.     %positiv
  381.     write('oma +'),
  382.     oma(maria,alois), write('.'),!,
  383.     oma(eve,jakob), write('.'),!,
  384.     oma(helen,steffi),
  385.     %negativ
  386.     write('. -'),!,
  387.     \+ oma(eve,alois), write('.'),!,
  388.     \+ oma(magda,steffi), write('.'),!,
  389.     \+ oma(hubert,thea),!, writeln('ok').
  390.  
  391. test(opa) :-
  392.     %positiv
  393.     write('opa +'),
  394.     opa(wall-e,manfred), write('.'),!,
  395.     opa(hubert,anton),
  396.     %negativ
  397.     write('. -'),!,
  398.     \+ opa(eve,jakob), write('.'),!,
  399.     \+ opa(xaver,bert), write('.'),!,
  400.     \+ opa(krimhild,magda),!, writeln('ok').
  401.  
  402. test(uroma) :-
  403.     %positiv
  404.     write('uroma +'),
  405.     uroma(eve,alois), write('.'),!,
  406.     uroma(krimhild,steffi),
  407.     %negativ
  408.     write('. -'),!,
  409.     \+ uroma(wall-e,alois), write('.'),!,
  410.     \+ uroma(vera,steffi), write('.'),!,
  411.     \+ uroma(hubert,lutz),!, writeln('ok').
  412.  
  413. test(uropa) :-
  414.     %positiv
  415.     write('uropa +'),
  416.     uropa(wall-e,magda), write('.'),!,
  417.     uropa(hubert,lutz),
  418.     %negativ
  419.     write('. -'),!,
  420.     \+ uropa(eve,magda), write('.'),!,
  421.     \+ uropa(xaver,lutz), write('.'),!,
  422.     \+ uropa(krimhild,steffi),!, writeln('ok').
  423.  
  424. test(maenUweibl) :-
  425.     write('maenUweibl '),
  426.     maenUweibl([zummsel]),!, writeln('ok').
  427.  
  428. test(verhKor) :-
  429.     write('verhKor '),
  430.     verhKor([ Tupel ]),!,
  431.     member(Tupel,[ (helge,elisa),(elisa,helge)]),!, writeln('ok').
  432.  
  433. test(elterVoll) :-
  434.     write('elterVoll '),
  435.     elterVoll([ Tupel ]),!,
  436.     member(Tupel,[ (elmo,kruemmel),(kruemmel,elmo)]),!, writeln('ok').
  437.  
  438. test(wurzel) :-
  439.     write('wurzel '),
  440.     list_to_ord_set([elisa, wall-e, eve, helge, zummsel],SetA),
  441.     wurzel(Liste),!,
  442.     list_to_ord_set(Liste,SetB),
  443.     ord_seteq(SetA,SetB),!, writeln('ok').
  444.  
  445. test(allfamilie) :-
  446.     test(nachkomme),
  447.     test(vorfahre),
  448.     test(nachkommen),
  449.     test(geschwister),
  450.     test(bruder),
  451.     test(schwester),
  452.     test(eheleute),
  453.     test(onkel),
  454.     test(tante),
  455.     test(oma),
  456.     test(opa),
  457.     test(uroma),
  458.     test(uropa),
  459.     test(maenUweibl),
  460.     test(verhKor),
  461.     test(elterVoll),
  462.     test(wurzel)
  463.     .
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement