Wiki source for PrologProgrammierung


Show raw source

=====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(<goal>). 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 ||kleiner||
||X>=Y ||größer oder gleich||
||X=<Y ||kleiner oder gleich||
||not(X)|| Negation||
||;||ODER-Verknüpfung||
||,||UND-Verknüpfung||
||:-||Implikation, wenn -> 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}}
Valid XHTML :: Valid CSS: :: Powered by WikkaWiki