Wichtige Prädikate
| Prädikat | Bedeutung |
|---|---|
append(A, B, C) | C = A ++ B |
member(X, L) | X ist in L |
length(L, N) | Länge |
reverse(L, R) | Umkehren |
nth0/nth1 | Element nach Index |
msort/sort/predsort | Sortieren |
sum_list/max_list | Summe/Maximum |
findall/bagof/setof | Lösungen sammeln |
maplist/foldl | Higher-Order |
atom_codes/atom_chars | Atom ↔ Zeichen |
assertz/retract | Fakten ändern |
format/2 | formatierte Ausgabe |
between/3 | Zahlenbereich |
Kleine Beispiele
main :-
sort(0, @>=, [3, 1, 2], A), writeln(A),
predsort([O, X, Y]>>(compare(O, X, Y)), [c, a, b], B), writeln(B),
sumlist([1, 2, 3], S), writeln(S),
nth1(2, [a, b, c], E), writeln(E),
sumlist([], Null), writeln(Null),
last([1, 2, 3], L), writeln(L),
sum_list([0.1, 0.2], F), writeln(F),
string_code(1, "A", C), writeln(C),
char_code(Z, 66), writeln(Z),
succ(3, N), writeln(N),
plus(2, P, 5), writeln(P),
tab(2), writeln(ende).Ausgabe
[3,2,1] [a,b,c] 6 b 0 3 0.30000000000000004 65 B 4 3 ende
Typische Fehler
main :- X is Y + 1, writeln(X).Fehlermeldung
Arguments are not sufficiently instantiated
main :- X is foo + 1, writeln(X).Fehlermeldung
Arithmetic: `foo/0' is not a function
Weiterführende Quellen
- swi-prolog.org/pldoc: Handbuch und Bibliotheken
- „Learn Prolog Now!“ (kostenlos online)
- „The Art of Prolog“ (Sterling, Shapiro)
- „The Power of Prolog“ (Markus Triska)
Merke
- Prolog: Fakten, Regeln, Anfragen; Unifikation und Backtracking
- Prädikate arbeiten relational (in mehrere Richtungen)
- Cut sparsam,
findallzum Sammeln, clpfd für Constraints
Aufgabe
Schreibe ein kleines Expertensystem: Tiere bestimmen anhand von Eigenschaften.