=====Programmierung in Prolog===== ==a==Grundfuktionen==a== |=|Funktion |=|SWI-Prolog|=|GNU-Prolog|| ||Das Programm ""MyKnowledge.pl"" laden. ||##consult('""MyKnowledge.pl'"").##||##consult('""MyKnowledge""').##|| ||Auflisten des Programms ||##listing.##||wie SWI|| ||Hilfe aufrufen||##help(help).##||wie SWI|| ||UND-Verknüpfung, Konjunktion||##tochter(K,E):-kind(K,E), weiblich(K).##||wie SWI|| ||ODER-Verknüpfung, Disjunktion||##mensch(K):-maennlich(K); weiblich(K).##||wie SWI|| ||Implikation (wenn, dann)|| || || ||Beenden||halt.||wie SWI|| ||Reload all laoded files||make.|| || ||Die Arbeitsweise von Prolog verfolgen||trace.|| || ||Wie trace, mit graphischer Oberfläche||gtrace|| || ||Zeit ermitteln || time(). z.B. time(run).|| Wird auch so angezeigt|| ==a==Operatoren==a== |=|Operator|=|Bezeichnung|=| ||X mod Y ||Modulo|| ||X*Y ||Multiplikation|| ||X/Y ||Division|| ||X+Y ||Addition|| ||X-Y ||Subtraktion|| ||X^Y ||Potenz|| ||X=:=Y||Test auf Äquivalenz der Werte der Terme A =:= B , A und B müssen initialisiert sein|| ||X=\=Y||Test auf Antivalenz der Werte der Terme A =\= B , A und B müssen initialisiert sein|| ||X is Y|| Zuweisung A is B , B muss initialisiert sein, X is a nicht möglich, aber X is 1|| ||X = Y||Äquivalenz, A = B, vergleich, wenn eines nicht initialisiert ist, dann Zuordnung|| ||==||Test auf Äquivalenz || ||\=||Test auf Antivalenz|| ||X>Y ||größer|| ||X=Y ||größer oder gleich|| ||X= dann, aber nicht nur dann, wenn! || ==a==Rekursion==a== Bei Rekursion muss der einfache Fall immer zuerst definiert werden. Das ist z.B. die Berechnung der Fakultät von 0 oder bei den Beispiel mit den Vorgesetzten, der direkte Vorgesetzte. Vorgesetzter (direkt und indirekt) %%(prolog) vorgesetzte(V,M):- direkter_vorgesetzte(V,M). vorgesetzte(V,M):- direkter_vorgesetzte(V,Z), vorgesetzte(Z,M). %% Fakultät berechnen %%(prolog;;25_fak.pl) fak(0,1). fak(N,X) :- N >0, M is N-1, fak(M,Y), X is Y*N. %% Gibt Zahlen von 1 bis theoretisch Unendlich aus %%(prolog) zahl(1). zahl(X):- zahl(Y), X is Y+1. %% ==a==Zahlenbereich==a== Gibt Zahlen von A bis E aus. between(A,E,Zahl). nicht in GNU-Prolog. %%(prolog) between(1,3,N). %% Between aus SWI-Prolog nachbilden. %%(prolog) betw(A,_,A). betw(A,E,X):- Y is A + 1, Y =< E, betw(Y,E,X). %% ==a==Summe aller Prädikate==a== %%(prolog) zahl(1). zahl(7). zahl(-3). summe([], 0). summe([H|T], S):-summe(T, A), S is A + H. run(S):- findall(N, zahl(N), L), summe(L, S). %% ==a==forall==a== %%(prolog) zahl(1). zahl(7). zahl(-3). %% %%(prolog) ?- forall(zahl(A), A > 0). fail. ?- forall(zahl(A), A > -10). true. %% ==a==Dynamisch Prädikate erzeugen==a== %%(prolog) % feste Benutzerliste user(marc). user(thomas). user(andreas). % Nachträglich hinzugefügte User berücksichtigen user(U):-duser(U), U \= 1. % Benutzer hinzifügen und löschen add(User):-not(user(User)), asserta(duser(User)). del(User):-retract(duser(User)). run:-reset. reset:-abolish(duser,1),asserta(duser(1)). %% ==a==Entwurfsmuster==a== OAW-Trippel oaw(**O**bjekt, **A**ttribut, **W**ert). Skript Seite 14 vwz(Linguistische_**V**ariable, Linguistischer_**W**ert, **Z**ugehoerigkeitswert). ==a==SWI-Prolog-Prädikate==a== ~-SwiPrologListenPraedikate ~-SwiPrologPraedikate ---- Siehe auch {{backlinks}}