Sunteți pe pagina 1din 1

1*2 + 3*4 => + ( *(1,2), *(3,4) ) functorul principal are precedenta cea mai mare?

? // => impartire intreaga / => impartire reala % => comentariu mod > modulo = =>matching: 2 atomi unifica daca sunt identici, o variabila unifica cu orice, 2 structuri unifica daca au acelasi functor principal si aceeasi aritate ( ex: f(1,2,x) != f(1,2,3,4) ) =<; >= =\=, =:= => inegalitate, respectiv egalitate intre expresii aritmetice \==, == => inegalitate, respectiv egalitate de termini (ex. mama == mama) , => si ; => sau ?=> interogare :=> daca Operatorii de mai sus au fost scrisi in ordinea crescatoare a precedentei. Operatorul cut (!) are intotdeauna valoarea true si are proprietatea ca taie backtracking-ul in punctul in care apare. In alte cuvinte, daca s-a gasit o solutie, nu se mai continua pentru gasirea alteia. Cut de tip verde = nu modifica rezultatul programului, rosu = modifica rezultatul programului. Se numeste parinte al cut-ului acel operator (predicat) care unifica (face matching) cu capul regulii in care apare cut-ul. Ex.: C:-P,Q,R,!,S,T,V. C:-U. A:-B,C,D. Interogare in Prolog: ?-A. daca B,C,D C daca P,Q,R,!,S, T,V => C este parinte al cut-ului _ variabila anonima Mai exista doua predicate fail (intotdeauna fals) si true (intotdeauna adevarat). Metapredicate: bagof, setof, findall. bagof( +Template, :Goal, -Bag), acelasi prototip si ptr setof si findall. findall = find all x where x satisfies :Goal Diferenta intre bagof si findall e ca bagof poate folosi ^ pentru a exclude un termen. Setof -> afiseaza lista ordonata si fara repetitii. Pentru a face debug cu interfata grafica: ?-guitracer. ?-debug. [debug]?-trace. [trace]?-problema(X,Y,Z). Se va deschide o interfata grafica in care puteti folosi mecanismele specifice: step, next, etc. Alte comenzi utile in Prolog: - consult(nume_fisier) incarca fisierul respectiv (merge cu Tab recunoaste fisierele din directorul curent) - make reincarca fisierele modificate

S-ar putea să vă placă și