+ oznacuje rozsireni Clocksin-Mellish standardu : " existenci v " " " (cislo) urcuje aritu predikatu. 1. Systemove predikaty ARITY/Prologu ================================= (0): ! : Predikat rez - 'cut' (1)+ [!A!] : Operator lokalniho rezu 'snips' (1)+ case A : Operator 'prepinac'; A ma tvar [C->G,...|E], kde 'C' je podminka a 'G' je cil; 'E' - else. (0): fail : Neuspech (2)+ ifthen(A,B) : if A = true then call(B) (3)+ ifthenelse(A,B,C) : if A = true then call(B) else call(C) (0): repeat : Predikat pro tvorbu cyklu; vzdy splnen (0): true : Uspech - pravda Pocet predikatu = 8 2. Klicova slova ARITY/Prologu =========================== (2): [A|B] : Operator 'je_seznam'; jinak i A.B Nebo: consult/reconsult v szn. notaci : v aritmetice [X] = X (2): A < B : Relacni operatory (aritmeticke) (2): A =< B : . (2): A > B : . (2): A >= B : . (2): A = B : Operator rovnosti (2): A \= B : Operator nerovnosti (2): A =.. B : Operator 'uniq': A je term s funktorem a argumenty dle seznamu B (2): A =:= B : Operator rovnosti pro aritmeticke vyrazy (2): A =\= B : Operator nerovnosti pro aritmeticke vyrazy (2): A == B : Striktni rovnost (true <=> A je sdilene s B) (2): A \== B : Striktni nerovnost (2)+ A @< B : Relacni operatory (obecne - i pro termy) (2)+ A @=< B : . (2)+ A @> B : . (2)+ A @>= B : . (1)+ \+ A : Operator 'not' (2)+ A ^ B : Operator umocneni Nebo: exist. kvantif. pro 'bagof', 'setof' (1)+ abolish(N/A) : Odstraneni klauzuli jmena N a arity A z db (0)+ abort : Abortuje bezici program (u APC vola cil 'restart') (3): arg(A,B,C) : Unifikuje C s A-tym argumentem termu B (3)+ arg0(A,B,C) : Totez jako 'arg', ale 1. argument ma cislo 0 (4)+ argrep(A,B,C,D) : Vytvori novy term D z termu A dosazenim noveho B-teho argumentu C (1): assert(A) : Prida klauzuli na konec definice predikatu (1): asserta(A) : Prida klauzuli na zacatek definice predikatu (1): assertz(A) : Jako 'assert' (1): atom(A) : Test, zda A je atom (2)+ atom_string(A,B) : Prevod atomu A na retezec B (a zpet) (1): atomic(A) : Test, zda A je cislo nebo atom (3)+ bagof(A,B,C) : Nalezne vsechny hodnoty promenne A pri volani cile B a ulozi je v nesetridenem seznamu C (0): break : Pozastavi provadeni beziciho programu; pokracovani ve vypoctu aktivuje 'end_of_file' (1): call(A) : Vola cil A (1)+ chdir(A) : Zmena ci zjisteni aktivniho direktory A (2)+ chmod(A,B) : Zmena ci zjisteni atributu B souboru A (2): clause(A,B) : Unifikuje telo a hlavu klauzule v db s A a B (1)+ close(A) : Uzavira soubor dany specifikatorem A (0)+ cls : Maze obrazovku (2)+ code_world(A,B) : Unifikuje jmeno stareho-aktualniho sveta (kod) s A a zmeni jej na nove jmeno B (1)+ command_string(A) : Vraci prikazovou radku programu jako string (3)+ compare(A,B,C) : Po porovnani dvou termu B a C je v A retezec urcujici poradi obou termu (viz @-operatory); jina orientace - porovnani termu B a C dle urcene relace v A (2)+ concat(A,B) : Retezec B vznikne spojenim retezcu ci atomu v seznamu A (3)+ concat(A,B,C) : Retezec C = A + B (1): consult(A) : Nacteni klauzuli do db ze souboru A (.ARI) (2)+ create(A,B) : Vytvoreni souboru B se specifikatorem A (1)+ create_world(A) : Vytvoreni noveho sveta A (2)+ ctr_dec(A,B) : Dekrementace citace A a predani stare hodnoty B (2)+ ctr_inc(A,B) : Inkrementace - " - - " - - " - (2)+ ctr_is(A,B) : Vraci hodnotu B citace A (2)+ ctr_set(A,B) : Nastavi citac A na hodnotu B (A - cislo) (3)+ current_op(A,B,C) : Vraci precedenci A a typ B aktualniho opera- toru C z databaze (backtrackingem vsechny) (1)+ current_predicate(A) : Vraci aktualni predikat A z db (uzivatelske) (2)+ data_world(A,B) : Jako 'code_world' pro datovy svet (1)+ date(A) : Vraci datum ve tvaru A = date(Year,Month,Day) (2)+ date_day(A,B) : Vraci den v tydnu B dle data A ve tvaru ^ (2)+ dec(A,B) : B = A - 1 (1)+ default_world(A) : Vraci jmeno aktualniho default sveta (1)+ delete(A) : Zrusi soubor A v direktory (1)+ delete_world(A) : Zrusi svet A (6)+ directory(A,B,C,D,E,F) : Vraci jmena souboru B dle specifikovane cesty A, atributu C, casu a data D a E a delky F (1)+ disk(A) : Vraci nebo nastavi aktualni disk A (1): display(A) : Vypis termu A ve funktorovem tvaru (2)+ display(A,B) : Totez co 'display' ale do souboru dle specifi- katoru A (term = B) (2)+ dup(A,B) : Vytvari duplicitni specifikator B pro A (1)+ edit(A) : Vola preddefinovany editor (dle nastaveni prikazem SET editor = ) pro soubor A (2)+ eq(A,B) : Uspeje jen tehdy, je-li A a B jeden objekt na stejne adrese (1)+ erase(A) : Odstrani z db term dle zadaneho odkazu A (1)+ eraseall(A) : Odstrani z db vsechny termy s klicem A (1)+ errcode(A) : Vraci cislo A chyboveho kodu (2)+ expand_term(A,B) : Transformuje term A v syntaxi DCG (gramatika) na klauzuli Prologu B (1)+ fast_consult(A) * Rychle nacteni klauzuli ze souboru A do db (1)+ file_list(A) * Listing db do souboru A (?) (2)+ file_list(A,B) * Listing predikatu B do souboru A (?) (2)+ fileerrors(A,B) : Povoleni ci zakazani (resp. zjisteni modu) reakce 'break' na souborove chyby; A - stara hodnota, B - nova hodnota (on/off) (3): findall(A,B,C) : C je seznam vsech hodnot A pri volani cile B; seznam neni usporadan a neinstalovane promenne jsou implicitne svazany existencnim kvantif. (1)+ float(A) : Test, zda A je realne cislo (popr. prevod pro aritmeticke vyrazy) (3)+ float_text(A,B,C) : Prevod realneho cisla A na retezec B dle formatu C ( a zpet) (0)+ flush : Vyprazdneni I/O bufferu (3): functor(A,B,C) : Term A je dan jmenem B a aritou C (1)+ gc(A) : Aktivuje garbage collector; A = {full, half} (1): get(A) : Vraci znak nacteny ze stand. vstupu (CHAR !) (2)+ get(A,B) : Vraci znak B ze vstupu daneho specifikatorem A (1): get0(A) : Totez jako 'get', ale i netisknutelne znaky (2)+ get0(A,B) : Jako 'get', - " - (1)+ get0_noecho(A) : Vraci nacteny znak ze stand. vstupu BEZ echa (0): halt : ukonceni cinnosti programu (2)+ in(A,B) : Precte z portu A byte B (2)+ inc(A,B) : B = A + 1 (2)+ instance(A,B) : Vraci term B spjaty s odkazem A (2)+ int_text(A,B) : Prevod integer A <-> string B (1): integer(A) : Test, zda A je cele cislo (2): A is B : Prirazovaci prikaz - B je aritm. vyraz; A := B (2)+ key(A,B) : Vraci klic A spjaty s odkazem B (2)+ keyb(A,B) : Vraci kody ASCII (A) a SCAN (B) nacteneho znaku (1)+ keys(A) : Vraci jmeno a aritu (A = Na/Ar) klicovych slov (2)+ keysort(A,B) : Trideni seznamu A dle klice (polozky maji tvar Key-Value) na seznam B (1)+ leash(A) : Nastaveni urovne trasovani: A = integer -> [call,exit,redo,fail] = [8,4,2,1] A = {full, tight (11), half (10), loose (8),off} (2): length(A,B) : Seznam A ma B clenu (2)+ list_text(A,B) : Prevod seznam A <-> string B (0): listing : Vypis vsech uzivatelskych predikatu (1): listing(A) : Vypis definice predikatu A (1)+ mkdir(A) : Vytvoreni direktory A (1)+ multi(A) * (?) (2): name(A,B) : Prevod atom A <-> seznam B ASCII hodnot jmena A (0): nl : Prechod na novou radku stand. vystupu (1)+ nl(A) : Prechod na novou radku v souboru dle specif. A (1): nonvar(A) : Test, zda A NENI neinstalovana promenna (1): nospy A : Odstrani spy-point z predikatu A (= Na/Ar) (1): not A : Uspeje pri neuspechu A (0): notrace : Vypina debugger (2)+ nref(A,B) : Vraci odkaz B na term nasledujici za termem s odkazem A (3)+ nth_char(A,B,C) : Vraci C - ASCII kod A-teho znaku retezce B (3)+ nth_ref(A,B,C) : Vraci odkaz C na B-ty term klice A (1): number(A) : Test, zda A je cislo (cele/realne) (3): op(A,B,C) : Definuje uzivatelsky operator C s precedenci A a typem B (*f - postfix, f* - prefix, *f* - infix, * = x - neasociativni / y - asociativni) (3)+ open(A,B,C) : Otevira existujici soubor B se specifikatorem A a pristupem C = {r,w,a,rw,ra} (2)+ out(A,B) : Zapise byte B na port A (2)+ pref(A,B) : Vraci odkaz B na term predchazejici pred termem s odkazem A (1): put(A) : Vypis znaku A na stand. vystup (2)+ put(A,B) : Vypis znaku B na vystup dle specif. A (1): read(A) : Nacteni termu A ze stand. vstupu (2)+ read(A,B) : Nacteni termu B ze vstupu dle specif. A (2)+ read_line(A,B) : Nacteni radky (do ) ze vstupu dle specif. A do retexce B (max. 127 znaku) (2)+ read_string(A,B) : Nacteni retezce B o max. delce A ze stand. vstupu (3)+ read_string(A,B,C) : Jako 'read_string(B,C)' ale dle specif. A (1): reconsult(A) : Nacteni klauzuli ze souboru A a prepsani db (3)+ record_after(A,B,C) : Prida term B za term s odkazem A a vraci novy odkaz C (3)+ recorda(A,B,C) : Zaznamena (prida) na zacatek term B pod klicem A a vrati hodnotu odkazu C (na B) (3)+ recordb(A,B,C) : Zaznamena term C do B-stromu A s klicem B (3)+ recorded(A,B,C) : Vraci termy A a jejich odkazy B pro klic A (3)+ recordh(A,B,C) : Zaznamena term C do hashovaci tabulky A s klicem B (3)+ recordz(A,B,C) : Zaznamena (prida) na konec term B pod klicem A a vrati hodnotu odkazu C (na B) (1)+ ref(A) : Test, zda A je odkaz (reference); tvar odkazu: ~0xxxxxxx (x - hexadecimalni cislice) (3)+ region_c(A,B,C) : Precte (C - neinst.) / zapise (C - inst.) znaky z casti obrazovky dane hornim levym rohem A a dolnim pravym rohem B (oboji ve tvaru '(Row,Col)' ) do retezce C (3)+ region_ca(A,B,C) : Jako 'region_c', ale v retezci C je za kazdym znakem i hodnota atributu daneho mista obrazovky (1)+ removeallb(A) : Zrusi B-strom A (1)+ removeallh(A) : Zrusi hashovaci tabulku A (3)+ removeb(A,B,C) : Zrusi term C z B-stromu A (tridici klic je B) (3)+ removeh(A,B,C) : Zrusi term C z H-tab. A ( - " - ) (2)+ rename(A,B) : Zmeni jmeno souboru A na nove - B (2)+ replace(A,B) : Prepise term s odkazem A novym termem B, ktery musi byt maximalne stejne velky jako puvodni (0)+ reset_op : Zrusi uzivatelske definice operatoru (0)+ resetspy * Zrusi vsechny spy-pointy (?) (0)+ restore : Eliminuje vsechny zmeny ve svetech od posledniho ulozeni (dle stand. .IDB a .Pxy) (1)+ restore(A) : Totez co 'restore', ale pro specif. soubory A (1)+ retract(A) : Odstraneni klauzule A z db (3)+ retrieveb(A,B,C) : Vraci term C ulozeny v B-stromu A dle klice B (3)+ retrieveh(A,B,C) : Vraci term C ulozeny v H-tabulce A dle klice B (1)+ rmdir(A) : Zrusi direktory A (0)+ save : Ulozi soucasny stav svetu do stand. souboru typu .IDB a .Pxy (1)+ save(A) : Totez co 'save', ale pro specif. soubory A (1): see(A) : Otevre kanal souboru A pro cteni (1): seeing(A) : Vraci jmeno aktivniho otevreneho kanalu A (4)+ seek(A,B,C,D) : Nastaveni pozice D v souboru se specif. A dle ofsetu B : - k danemu mistu : C = current - k zacatku souboru : C = bof - ke konci souboru : C = eof (0): seen : Ukonceni zapisu do aktivniho kanalu a uzavreni s nim spjateho souboru (3)+ setof(A,B,C) : Jako 'bagof', ale v seznamu C nejsou redundance a je setrideny (0)+ shell : Pozastaveni Prologu a aktivace DOSu (1)+ shell(A) : Predani prikazu A DOSu a cekani na jeho provedeni (1): skip(A) : Hledani znaku A ve stand. vstupu (2)+ skip(A,B) : Jako 'skip(B)', ale pro specifikator A (2)+ sort(A,B) : Trideni seznamu A na seznam B (1): spy A : Umisteni spy-pointu na predikat A (0)+ statistics : Vypise statistiku prace na display (2)+ statistics(A,B) : Pro jednotlive polozky statistiky A vraci jejich hodnoty B (stacks,database,page(in),page(out), world,local,global,trail,atoms,garbage) (2)+ stdin(A,B) : Pro cil B presmeruje vstup na soubor A (3)+ stdinout(A,B,C) : Pro cil C presmeruje vstup na soubor A a vystup na soubor B (2)+ stdout(A,B) : Pro cil B presmeruje vystup na soubor A (1)+ string(A) : Test, zda A je retezec (2)+ string_length(A,B) : Vraci delku B retezce A (3)+ string_search(A,B,C) : Vyhleda retezec A v retezci B a vraci jeho pozici (2)+ string_term(A,B) : Prevod retezec A <-> term B (4)+ substring(A,B,C,D) : Z retezce A vycleni retezec D z pozice B o delce C (2)+ syntaxerrors(A,B) : Povoli ci zakaze systemovou reakci na syntakticke chyby (viz 'fileerrors') (1)+ system(A) : Test, zda A je predikat - cil (1): tab(A) : Vypise A mezer na stand. vystup (2)+ tab(A,B) : Jako 'tab(B)' , ale na specif. A (1): tell(A) : Otevre kanal souboru A pro zapis (1): telling(A) : Vraci jmeno aktivniho vystupniho kanalu A (2)+ tget(A,B) : Zjisteni pozice (Row,Col) = (A,B) kurzoru na obr. (1)+ time(A) : Vraci hodnotu systemoveho casu ve tvaru: A = time(Hour,Minute,Seconds,Hundreds) (2)+ tmove(A,B) : Nastaveni pozice kurzoru na (A,B) = (Row,Col) (0): told : Ukonceni vystupu do aktivniho kanalu a uzavreni souboru s nim spjateho (0): trace : Zapina debugger (3)+ tscroll(A,B,C) : Roluje cast obrazovky mezi levym hornim B a pravym dolnim C (ve tvaru '(Row,Col)') rohem v poctu A radek (1): var(A) : Test, zda A je neinstalovana promenna (2)+ wa(A,B) : Nastaveni A pozic od kurzoru doleva na atribut B (pozice kurzoru nezmenena) (2)+ wc(A,B) : Vypis A znaku B od kurzoru doleva (3)+ wca(A,B,C) : Vypis A znaku B s atributem C od kurzoru doleva (1)+ what_worlds(A) : Zjisteni existujicich svetu A (1): write(A) : Vypis termu A na stand. vystup (2)+ write(A,B) : Jako 'write(B)', ale na specif. B (1)+ writeq(A) : Vypis termu A v apostrofech (pro budouci 'read') (2)+ writeq(A,B) : Jako 'writeq(B)', ale na specif. A Pocet predikatu = 192 POZN.: Predikaty oznacene '*' misto ':' nejsou v manualu popsany ! 3. Predikaty ARITY/Prologu dle skupin (urceni) =========================================== . Operatory (OPERATORS) relacni a aritmeticke =, ==, =:=, \=, \==, =\=, <, >, =<, >=, @<, @>, @=<, @>=, +, -, *, /, //, \/, /\, <<, >>, \, mod, is {abs, acos, asin, atan, cos, sin, tan, log, ln, exp, sqrt, round, random, pi} @. Aritmetika citacu (COUNTERS) ctr_set, ctr_is, ctr_dec, ctr_inc, dec, inc a. Prace se STRUKTURAMI =.., functor, arg, arg0, argrep, name, length b. Prace s TERMY v databazi recorda, recordz, record_after, recorded, instance, key, keys, nref, pref, nth_ref, replace, erase, eraseall c. Prace s KLAUZULEMI v databazi clause, asserta, assertz, assert, retract, abolish d. Prohlizeni DATABAZE listing, current_predicate e. Prace se svety (WORLD) create_world, code_world, date_world, default_world, what_worlds, delete_world, save, restore f. Prace se stromovou strukturou (B-TREE) recordb, retrieveb, removeb, removeallb g. Prace s hashovacimi tabulkami (HASH-TABLE) recorh, retrieveh, removeh, removeallh h. Standardni vstupy a vystupy (STAND. I/O) read, write, writeq, display, op, current_op, reset_op i. Znakovy vstup a vystup (CHAR. I/O) get, get0, get0_noecho, keyb, flush, skip, put, nl, tab, in, out j. System souboru (FILE I/O) create, open, close, seek, dup, stdin, stdout, stdinout, see, seeing, seen, tell, telling, told k. Prace s retezci (STRING) string_search, substring, nth_char, string_length, concat, read_string, read_line l. Prevody mezi typy (CONVERTING) a klasifikace termu (CLASIFY) string_term, atom_string, int_text, float_text, list_text, atom, atomic, number, float, integer, string, ref, var, nonvar m. Prace s obrazovkou (SCREEN MANAGEMENT) tget, tmove, wc, wa, wca, tscroll, cls, region_c, region_ca n. Vazby na operacni system a systemove predikaty (SYSTEM) shell, halt, gc, statistics, system, [!!], !, repeat, fail, true, case, ifthen, ifthenelse, consult, reconsult, [], edit, syntaxerrors, fileerrors, errcode, disk, mkdir, chdir, rmdir, delete, rename, chmod, date, time, date_day, command_string o. Ladici prostredky (DEBUGER) trace, notrace, spy, nospy, leash, resetspy p. Syntaxe klauzuli ve tvaru bezkontextove gramatiky (DCG) expand_term, -->, = Prologovske struktury = seznamy Prologovskych termu = neterminal, pripadne nasledovany sekvenci terminalu = kombinace neterminalu a terminalu, ';', '|', Prologovske cile v {}-zavorkach, 'cut' - !. ********************************************************************************** 4. Operatory ARITY/Prologu dle abecedy =================================== * Prec: 400 Typ: yfx : Aritmeticke operatory + Prec: 500 Typ: fx : A. + Prec: 500 Typ: yfx : A. , Prec: 1000 Typ: xfy : Operator logicke konjunkce (cilu) - Prec: 500 Typ: fx : A. Nebo: -File v szn. notaci pro reconsult - Prec: 500 Typ: yfx : A. --> Prec: 1200 Typ: xfx : Operator pro prepisovaci pravidlo DCG -> Prec: 800 Typ: xfy : Operator pro prikaz 'case' / Prec: 400 Typ: yfx : A. // Prec: 400 Typ: yfx : A. (celociselne deleni) /\ Prec: 500 Typ: yfx : A. (bitove AND) : Prec: 500 Typ: xfy : Operator pro obecne vytvareni dvojic :- Prec: 1200 Typ: fx : Operator logicke implikace (consult cile) :- Prec: 1200 Typ: xfx : Operator logicke implikace (pravidla) ; Prec: 1100 Typ: xfy : Operator logicke disjunkce (cilu) < Prec: 700 Typ: xfx : Relacni operatory << Prec: 400 Typ: yfx : A. (Bit. posun A doprava o B mist: A< Prec: 700 Typ: xfx : R. >= Prec: 700 Typ: xfx : R. >> Prec: 400 Typ: yfx : A. (Bitovy posun doleva) ?- Prec: 1200 Typ: fx : Operator uvozeni otazky (cile) @< Prec: 700 Typ: xfx : R. @=< Prec: 700 Typ: xfx : R. @> Prec: 700 Typ: xfx : R. @>= Prec: 700 Typ: xfx : R. \+ Prec: 900 Typ: fy : Totozne s 'not' (negace cile) \/ Prec: 500 Typ: yfx : A. (Bitove OR) \= Prec: 700 Typ: xfx : R. \== Prec: 700 Typ: xfx : R. ^ Prec: 200 Typ: xfy : A. (Umocneni) Ale take: existencni kvantifikator pro 'setof', 'bagof' case Prec: 900 Typ: fx : Oprerator 'prepinac' extrn Prec: 1150 Typ: fy : Deklarace externich predikatu is Prec: 700 Typ: xfx : A. (Prirazeni) mod Prec: 300 Typ: xfx : A. (Zbytek po deleni) mode Prec: 1150 Typ: fy : Deklarace orientace predikatu module Prec: 1150 Typ: fy : Definice jmena modulu nospy Prec: 900 Typ: fy : Spy point off not Prec: 900 Typ: fy : Negace cile public Prec: 1150 Typ: fy : Deklarace globalnich predikatu spy Prec: 900 Typ: fy : Spy point on visible Prec: 1150 Typ: fy : Deklarace externich predikatu jako datovych (viditelnych) 5. Operatory ARITY/Prologu dle precedence ====================================== ^ Prec: 200 Typ: xfy mod Prec: 300 Typ: xfx * Prec: 400 Typ: yfx / Prec: 400 Typ: yfx // Prec: 400 Typ: yfx << Prec: 400 Typ: yfx >> Prec: 400 Typ: yfx + Prec: 500 Typ: fx + Prec: 500 Typ: yfx - Prec: 500 Typ: fx - Prec: 500 Typ: yfx /\ Prec: 500 Typ: yfx : Prec: 500 Typ: xfy \/ Prec: 500 Typ: yfx < Prec: 700 Typ: xfx = Prec: 700 Typ: xfx =.. Prec: 700 Typ: xfx =:= Prec: 700 Typ: xfx =< Prec: 700 Typ: xfx == Prec: 700 Typ: xfx =\= Prec: 700 Typ: xfx > Prec: 700 Typ: xfx >= Prec: 700 Typ: xfx @< Prec: 700 Typ: xfx @=< Prec: 700 Typ: xfx @> Prec: 700 Typ: xfx @>= Prec: 700 Typ: xfx \= Prec: 700 Typ: xfx \== Prec: 700 Typ: xfx is Prec: 700 Typ: xfx -> Prec: 800 Typ: xfy \+ Prec: 900 Typ: fy case Prec: 900 Typ: fx nospy Prec: 900 Typ: fy not Prec: 900 Typ: fy spy Prec: 900 Typ: fy , Prec: 1000 Typ: xfy ; Prec: 1100 Typ: xfy extrn Prec: 1150 Typ: fy mode Prec: 1150 Typ: fy module Prec: 1150 Typ: fy public Prec: 1150 Typ: fy visible Prec: 1150 Typ: fy --> Prec: 1200 Typ: xfx :- Prec: 1200 Typ: fx :- Prec: 1200 Typ: xfx ?- Prec: 1200 Typ: fx