| write(X) | výpis termu X |
|---|---|
| read(X) | načtení termu X |
| get(X) | načte jeden nebílý znak a X je instanciováno na ASCII kód načteného znaku |
| put(X) | vypíše znak odpovídající ASCII kódu X |
| nl | odřádkování |
| tab(N) | výpis N mezer |
|
cti:- read(X), write(X),nl.
?- cti. cti_znak:-get(X), put(X),nl. ?- cti_znak. |
|: ahoj. ahoj |: ahoj a |
| atom(X) | X je atom |
|---|---|
| atomic(X) | X je term (atom, řetězec, číslo) |
| integer(X) | X je celé číslo |
| var(X) | X je volná proměnná |
| nonvar(X) | X není volná proměnná |
|
je_atom(X):- atom(X).
?-je_atom(ahoj). je_term(X):- atomic(X). ?-je_term(ahoj). je_cislo(X):- integer(X). ?- je_cislo(k). |
yes yes no |
| bagof(T,C,S) | vytvoří seznam S ze všech termů T pro něž je splněn cíl C |
|---|---|
| setof(T,C,S) | podobné jako bagof; každý term se však může v seznamu vyskytovat pouze jednou |
| findall(T,C,S) | podobné jako bagof; v seznamu jsou všechny dostupné řešení |
| trace | krokování programu |
|---|---|
| notrace | ukončení krokování |
| spy(P) | krokování pouze tzv. testovacích bodů; testovacími body můžou být atomy,struktury nebo predikáty |
| nospy | ruší nastavení krokovacích bodů |
| operátor | význam | nejčastější použití |
|---|---|---|
| :- | definice pravidla | viz dříve |
| ?- | otázka | viz dříve |
| ; | logické nebo | otázky, nebo pravidla |
| , | logické a | otázky, nebo pravidla |
| = | porovnání | viz * |
| \= | opak = | stejné jako u = |
| is | vyčíslení | pravidla |
| <, >, =<, >=, | porovnání | pravidla |
| ==, \== | porovnání bez přiřazení | pravidla |
| =:=, =\= | porovnání s vyhodnocením | pravidla |
| +, -, *, /, mod, div ** | standardní matematické funkce | pravidla |
| not | negace | pravidla |
Tyto operátory považujeme za standardní,nemusíme je defino-vat. Kromě těchto vestavěných operátorů si můžeme tvořit i libovolné vlastní operátory. Tyto operátory definujeme následujícím způsobem: :-op(priorita,specifikator,jmeno).
| fail | predikát, který nemůže být nikdy splněn |
|---|---|
| ! | (řez) - zabraňuje navracení |
| call(C) | je pravdivý, když cíl C je pravdivý |
| repeat | vždy splněný predikát (i při navracení) |
| not | negace |
|
muz(jan).
muz(petr). muz(dalibor). zena(petra). vypis:-muz(X),write(X),nl,fail. ?- vypis. vypis2:-repeat, read(X), (X=stop,!; nl,write(X), fail). |
jan petr dalibor |
Každý program v Prologu je složen z množiny relací. Všechny relace pak můžeme považovat za relační databázi, která obsahuje fakta a pravidla. Prolog nám povoluje při běhu programu tuto databázi upravovat pomocí vestavěných predikátů.
| assert(C). | přidá klauzuli vázanou na proměnou C do databáze. Cíl C je možno splnit pouze jednou. Z toho důvodu není možné jej při navracení splnit znovu |
|---|---|
| asserta(C). | plní stejnou funkci jako assert(C). Klauzule C se vloží na začátek databáze |
| assertz(C). | plní stejnou funkci jako assert(C). Klauzule C se přidá na konec databáze. |
| consult(Soubor). | do databáze se načtou klauzule ze souboru |
| retract(C). | výmaz klauzule která se dá unifikovat s C |
| retractall(H). | výmaz všech klauzulí, jejichž hlavy se unifikují s P. V některých implementacích (např. v Arity Prologu) se jmenuje abolish |
| listing. | výpis celé databáze |
| listing(P). | výpis všech klauzulí definující predikát P |
| listing(P/Arita). | výpis všech klauzulí definující predikát P pevně určené arity |