Prolog

123456

Cadet
Mitglied seit
28.09.2005
Beiträge
5
Renomée
0
Hallo,
Könnte mir einer von euch ein Beispielprogramm von Prolog bezüglich eines Stammbaumes mit den dazugehörigen Regeln zusenden oder hier Posten. Wär echt nett brauch das nämlich zu Freitag (die Regeln bis Urgroßeltern über schwager usw.) schon mal danke im Vorraus.
 
Es gibt da ein chinesisches Sprichwort... (etc. pp. - hat sicher jeder schonmal gehört)

Wozu brauchst du das denn? Das Progger-Forum ist nämlich nicht da um den Leuten ihre Hausaufgaben oder ähnliche Sachen abzunehmen. Noch dazu, da das Beispiel so verdammt einfach ist.
 
Hy weiß ich selbst und ich hab mich in einem Anderen Forum zu dem selben Them auch schon mit einem verständigt

ww.linux-web.de/thread.php?postid=57620#post57620
(darf noch nicht linken)

wäre Trotzdem nett wenn es so ein Programm bekommen würde
 
Wenn du schon ein Prog geschrieben hast, dann poste es doch mal. Ansonsten kann ich mich nämlich nur der 1. Antwort in dem von dir verlinkten Thread anschließen - wir machen doch nicht deine Hausaufgaben.

Wie gesagt, poste was du geschrieben hast.
 
maennlich(maik).
maennlich(axel).
maennlich(horst).
maennlich(peter).
maennlich(paul).
maennlich(horst).

weiblich(ute).
weiblich(jana).
weiblich(petra).
weiblich(anna).
weiblich(julia).
weiblich(susi).
weiblich(julia2).

eltern(maik,axel,ute).
eltern(horst,peter,jana).
eltern(petra,sven,anna).
eltern(julia,paul,susi).
eltern(julia2,paul,susi).
eltern(horst2,peter,jana).

verheiratet(axel,ute).
verheiratet(ute,axel).
verheiratet(peter,jana).
verheiratet(jana,peter.
verheiratet(sven,anna).
verheiratet(anna,sven).
verheiratet(paul,susi).
verheiratet(susi,paul).


mutter(Ki,Ma):- eltern(Ki,Pa,Ma), weiblich(Ma).
vater(Ki,Pa):- eltern(Ki,Pa,Ma), maennlich(Pa).
sohn(Pa,Ma,Ki):- eltern(Ki,Pa,Ma), maennlich(Ki).
tochter(Pa,Ma,Ki):- eltern(Ki,Pa,Ma), weiblich(Ki).

Das war der Anfang hat man mir aber gesagt es mach alles zu kompliziert wenn man es 3 Teilig macht (eltern) also


maennlich(horst).
usw.

weiblich(susi).
usw.

elternteil(susi,horst).
usw.

verheiratet(horst,susi).
usw.

#Regeln#

vater (Ki, Va) :- elternteil(Ki, Va), maennlich(Va).
mutter (Ki, Ma) :- elternteil(Ki, Ma), weiblich(Ma).
eltern (Ki, El) :- elternteil(Ki, El).
Opa (Ek, Op) :- vater(X, Op), elternteil(Ek, X).
Oma(Ek, Om) :- mutter(Y, Om), elternteil(Ek, Y).
UOpa(UEk, UOp) :- opa(X, UOp), elternteil(UEk, X).
UOma(UEk, UOm) :- Oma(X, UOm), elternteil(UEk, X).
kind(Ki, Et) :- elternteil(Ki, Et).
bruder(Gs, Br) :- maennlich(Br), elternteil(Br, X), elternteil(Gs, X).
schwester(Gs, Schw) :- weiblich(Schw), elternteil(Schw, Y), elternteil(Gs, Y).
geschwister(Gs, Gss) :- elternteil(Gs, Z), elternteil(Gss, Z).

onkel(Ki, ):- elternteil(

Verdammt
Onkel/Tante
Schwager/Schwägerin
Enkel/Urenkel
Cousin

bekomm ich noch nicht hin
 
Hmm.... muss mich auch erstmal wieder in Prolog reindenken... ist schon eine Weile her, und so viel hab ich damit auch net gemacht.

Ich denk das mit dem eltern war schon nicht schlecht, aber mach das trotzdem besser mit einer Verbindung. Also so:

maennlich(maik).
maennlich(axel).
maennlich(horst).
maennlich(peter).
maennlich(paul).
maennlich(horst).

weiblich(ute).
weiblich(jana).
weiblich(petra).
weiblich(anna).
weiblich(julia).
weiblich(susi).
weiblich(julia2).

eltern(maik,axel).
eltern(maik,ute).

eltern(horst,jana).
eltern(horst,peter).

etc. pp.

Daraus ergäbe sich dann das:

mutter(Ki,P):- eltern(Ki,P), weiblich(P).
vater(Ki,P):- eltern(Ki,P), maennlich(P).

Dann brauchst du aber noch die Beziehung Schwester/Bruder. Schwester wenn weiblich und selbe Eltern wie jemand anders, Bruder wenn männlich und selbe Eltern wie jemand anders. Weiterführend könnte man noch Halbbruder/Halbschwester implementieren.

Ich merk gerade, dass ich die Schreibweise nimmer drauf hab, muss mich dazu erstmal belesen.

Onkel sind dann zB. alle Brüder der Elternteile, Tante alle Schwestern der Elternteile. Cousin Söhne der Brüder/Schwestern der Elternteile, Cousine Töchter der Brüder/Schwestern der Elternteile.
 
die Regeln für Burder Schwester und so hab ich schon

#Regeln#

vater (Ki, Va) :- elternteil(Ki, Va), maennlich(Va).
mutter (Ki, Ma) :- elternteil(Ki, Ma), weiblich(Ma).
eltern (Ki, El) :- elternteil(Ki, El).
Opa (Ek, Op) :- vater(X, Op), elternteil(Ek, X).
Oma(Ek, Om) :- mutter(Y, Om), elternteil(Ek, Y).
UOpa(UEk, UOp) :- opa(X, UOp), elternteil(UEk, X).
UOma(UEk, UOm) :- Oma(X, UOm), elternteil(UEk, X).
kind(Ki, Et) :- elternteil(Ki, Et).
bruder(Gs, Br) :- maennlich(Br), elternteil(Br, X), elternteil(Gs, X).
schwester(Gs, Schw) :- weiblich(Schw), elternteil(Schw, Y), elternteil(Gs, Y).
geschwister(Gs, Gss) :- elternteil(Gs, Z), elternteil(Gss, Z).

onkel(Ki, ):- elternteil(

Verdammt
Onkel/Tante
Schwager/Schwägerin
Enkel/Urenkel
Cousin
 
Funktioniert Bruder/Schwester etc. denn auch schon?

Onkel würde ich zB. so machen:

onkel(Ki, Ok) :- eltern(Ki, X), bruder(Ok, X)

geschwister ist imho nicht richtig definiert, es gibt ja auch gebrüder ;).

Die Preisfrage ist aber erstmal, ob bis zu bruder und schwester alles funktioniert.
 
Wir haben den Auftrag bekommen, Aufgaben vom 23.Bundeswettbewerb Informatik in Prolog-Schreibweise zu lösen. Uns ist es gelungen die Aufgabe tratsch ... zu lösen , jedoch stellt die aufgabe 2 (Klasse Arbeit) ein unüberwindbares Hindernis dar , was zum teil auch an der spärlichen Informationsweitergabe unseres Lehrers an uns liegen mag.
daher bitten wir um höflichst um Hilfe und Beistand um diese schier unmögliche krise zu bewältigen.
Mit freundlichen Grüßen
der Informatik LK 13 von der Aussenstelle des Goethe Gymnasiums

>>siehe Homepage BWI<<

dieser Lösungsansatz konnte uns zwar logisch aber leider nicht im syntax helfen
 
Was für eine Runde?

Der Bwinf war früher mal gut, inzwsichen ist das aber ziemlicher Schrott geworden. Ich mal doch keine Bilder bei einem Informatik-Wettbewerb ;).
 
So, hab eine L&#246;sung. B&#252;cher 6, 7, 1 und 4. Die Regeln daf&#252;r lassen sich in Prolog implementieren, zum Teil hab ich das aber noch per Hand &#252;ber Abfragen gemacht. Bin in Prolog noch nicht so ganz fit.
Auf jeden Fall musst du an das Problem herangehen, indem du suchst welche B&#252;cher du mindestens brauchst.
 
Puh, hat eine Weile gedauert aber ich hab was. Ich hab die Datenbank mal einzeln aufgestellt, damit die reverses bessser gehen:

Code:
% what works exist
work(1).
work(2).
work(3).
work(4).
work(5).
work(6).
work(7).
work(8).
work(9).
work(10).
work(11).
work(12).
work(13).
work(14).
work(15).
work(16).
work(17).
work(18).
work(19).

% known works
known(1).
known(2).
known(4).
known(6).
known(7).
known(8).
known(10).
known(12).
known(14).
known(16).
known(18).
known(20).

% unknown works
unknown(A) :- work(A), \+known(A).

% which book contains which work
contains(1,  1).
contains(1,  9).
contains(1, 12).
contains(1, 15).
contains(1, 18).

contains(2,  2).
contains(2,  3).
contains(2,  5).
contains(2, 14).
contains(2, 15).

contains(3,  4).
contains(3,  7).
contains(3, 13).
contains(3, 16).
contains(3, 18).

contains(4,  5).
contains(4, 11).
contains(4, 16).
contains(4, 19).
contains(4, 20).

contains(5,  6).
contains(5,  8).
contains(5, 11).
contains(5, 14).
contains(5, 15).

contains(6,  1).
contains(6,  3).
contains(6,  6).
contains(6, 17). 
contains(6, 20).

contains(7,  2).
contains(7,  8).
contains(7, 10).
contains(7, 13).
contains(7, 19).

contains(8,  4).
contains(8,  9).
contains(8, 10).
contains(8, 12).
contains(8, 16).

% true, if W is contained by at least one book in list, false else
contains_list([Bh|Bt], W) :- contains(Bh, W) ; contains_list(Bt, W).

% true, if contains_list is true for each work in list
check_list(X, []) :- \+(X=[]).
check_list(B, [Wh|Wt]) :- contains_list(B, Wh), check_list(B, Wt).

check(Len) :-	setof(X, (work(X), unknown(X)), Bag), sublist(L, [1, 2, 3, 4, 5, 6, 7, 8]), length(L, Len), check_list(L, Bag).

get_min_list(L) :- 	setof(X, check(X), Bag), min_list(Bag, A), 
			setof(Y, (work(Y), unknown(Y)), Bag1), sublist(L, [1, 2, 3, 4, 5, 6, 7, 8]), check_list(L, Bag1), length(L, A).

Geht etwas durcheinander. Die Abfrage get_min_list(L) liefert dann die beiden m&#246;glichen Ergebnisse, n&#228;mlich [1, 4, 6, 7] und [1, 3, 4, 6] bzw. das erste gleich 2mal (wieso ist mir jetzt egal).

F&#252;r eine Schule d&#252;rften das zu hohe Anforderungen sein. Ach ja, das ist GNU Prolog, \+ bedeutet not. Die &#220;berlegung ist ganz einfach, aber es dauert mitunter eine Weile erstmal darauf zu kommen - es wird f&#252;r jede Teilmenge der Menge aller B&#252;cher [1, 2, ..., 8] getestet, ob diese alle nicht bekannten Aufgaben enth&#228;lt. Dann werden aus der Menge aller L&#246;sungen des Problems die k&#252;rzesten ausgegeben.
 
Hallo,

ich habe eine Frage die sich am Beispiel von 123456 orientiert. Wie sähe eine Anfrage aus, die mir alle weiblichen Personen zurückgibt ? weiblich(X) gibt nur die erste weibliche Person zurück und bricht dann ab.

Grüße

Alex
 
ich weiß nicht, ob hier noch leute reinschauen, aber ich versuchs trotzdem mal =P
ich habe in prolog ein programm geschrieben, das, für mich X mal würfelt und dann die ergebnisse in einer liste (W) ausgibt. (beispiel: zwurf(150,A)=>(17,26,28,19,32,28).
jetzt möchte ich ein prädikat hinzufügen, das nach X mal würfeln die relativen häufigkeiten (in %) ausgibt, eine 1,2,...,6 zu würfeln. die frage ist da nur.... WIE GEHT DAS?
ich stell mir das ergebnis dann ungefähr so vor:
rhkt(30000,U) ergibt U=(16.5633, 16.5667, 16.6267, 17.0367, 16.7333, 16.4733).

ich wäre dankbar für schnelle hilfe.
mfg
lolcifer
 
Zurück
Oben Unten