Kurz: > Achtung: Prolog antwortet bei unbekannten Prädikaten mit Unknown procedure. Prüfe Tippfehler und die Stelligkeit (name/Anzahl).
Teil des Kurses Prolog
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
endeTypische Fehler
main :- X is Y + 1, writeln(X).Fehlermeldung:
Arguments are not sufficiently instantiatedmain :- X is foo + 1, writeln(X).Fehlermeldung:
Arithmetic: `foo/0' is not a functionAchtung
Prolog antwortet bei unbekannten Prädikaten mit
Unknown procedure. Prüfe Tippfehler und die Stelligkeit (name/Anzahl).
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
Übungsaufgabe
Schreibe ein kleines Expertensystem: Tiere bestimmen anhand von Eigenschaften.
Quiz zur Selbstkontrolle
Wie schreibt man Variablen in Prolog?
- Mit Großbuchstaben oder Unterstrich beginnend (richtig)
- Mit $ davor
- Klein geschrieben
- In Anführungszeichen
Was gibt Prolog bei fehlender Instanziierung aus?
- Arguments are not sufficiently instantiated (richtig)
- Nichts
- 0
- true
Wie gibt man Text aus?
- format/2 oder write/1 (richtig)
- echo
- print_line
- puts
Weiter im Kurs
Zurück: Module, Ein-/Ausgabe und Ökosystem
Alle Kapitel: Prolog im Überblick