Revision [6991]

This is an old revision of PrologProgrammierung made by ToBo on 2008-12-09 23:16:47.

 

Programmierung in Prolog


1. Grundfuktionen


Funktion SWI-PrologGNU-Prolog
Das Programm MyKnowledge.pl laden. consult('MyKnowledge.pl').(prolog)consult('MyKnowledge').
Auflisten des Programms listing.wie SWI
Hilfe aufrufenhelp(help).wie SWI
UND-Verknüpfung, Konjunktiontochter(K,E):-kind(K,E), weiblich(K).wie SWI
ODER-Verknüpfung, Disjunktionmensch(K):-maennlich(K); weiblich(K).wie SWI
Implikation (wenn, dann)
Beendenhalt.wie SWI
Reload all laoded filesmake.
Die Arbeitsweise von Prolog verfolgentrace.
Wie trace, mit graphischer Oberflächegtrace
Zeit ermitteln time(<goal>). z.B. time(run). Wird auch so angezeigt


2. Spezielle Themen

3. Operatoren


OperatorBezeichnung
X mod Y Modulo
X*Y Multiplikation
X/Y Division
X+Y Addition
X-Y Subtraktion
X^Y Potenz
X=:=YTest auf Äquivalenz der Werte der Terme A =:= B , A und B müssen initialisiert sein
X=\=YTest 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!

4. Rekursion


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)
vorgesetzte(V,M):- direkter_vorgesetzte(V,M).
vorgesetzte(V,M):- direkter_vorgesetzte(V,Z), vorgesetzte(Z,M).


Fakultät berechnen
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
zahl(1).
zahl(X):- zahl(Y), X is Y+1.



5. Zahlenbereich


Gibt Zahlen von A bis E aus. between(A,E,Zahl). nicht in GNU-Prolog.
between(1,3,N).


Between aus SWI-Prolog nachbilden.
betw(A,_,A).
betw(A,E,X):- Y is A + 1, Y =< E, betw(Y,E,X).


6. Summe aller Prädikate


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).


7. forall


zahl(1).
zahl(7).
zahl(-3).


?- forall(zahl(A), A > 0).
fail.
?- forall(zahl(A), A > -10).
true.



8. Dynamisch Prädikate erzeugen


% 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)).



9. Entwurfsmuster


OAW-Trippel
oaw(Objekt, Attribut, Wert).

Skript Seite 14

vwz(Linguistische_Variable, Linguistischer_Wert, Zugehoerigkeitswert).



Siehe auch
Valid XHTML :: Valid CSS: :: Powered by WikkaWiki