Web Analytics Made Easy - Statcounter

[HOME PAGE] [STORES] [CLASSICISTRANIERI.COM] [FOTO] [YOUTUBE CHANNEL]

Prolog - Viquip??dia

Prolog

De Viquip??dia

El Prolog (nom provinent dels mots francesos programation i logique) ??s un llenguatge de programaci?? bastant popular en el medi d'investigaci?? en intel??lig??ncia artificial.

Es tracta d'un llenguatge de programaci?? ideat a principis dels anys 70 a la universitat d'Ais-Marsella pels professors Alain Colmerauer i Phillipe Roussel. Inicialment es tractava d'un llenguatge totalment interpretat fins que, a mitjans dels 70, David H.D. Warren va desenvolupar un compilador capa?? de traduir Prolog en un conjunt d'instruccions d'una m??quina abstracta denominada Warren Abstract Machine, o abreviadament, WAM. Des de llavors, Prolog ??s un llenguatge semi-interpretat.

El Prolog s'emmarca en el paradigma dels llenguatges declaratius, la qual cosa el diferencia enormement d'altres llenguatges m??s populars com Fortran, Pascal, C, etc.

En aquests darrers llenguatges, les instruccions s'executen normalment en ordre seq??encial, ??s a dir, una a continuaci?? d'una altra, en el mateix ordre en el qual estan escrites, que nom??s varia quan s'arriba a una instrucci?? de control (un bucle, una instrucci?? condicional o una transfer??ncia).

Els programes en Prolog es composen de cl??usules de Horn, que constitueixen regles del tipus "modus ponens", ??s a dir, "Si de veritat l'antecedent, llavors ??s veritat el conseq??ent". No obstant, la forma d'escriure les cl??usules de Horn ??s al contrari de l'habitual. Primer s'escriu el conseq??ent i despr??s l'antecedent. L'antecedent pot ser una conjunci?? de condicions que es denomina seq????ncia d'objectius. Cada objectiu se separa amb una coma i pot considerar-se similar a una instrucci?? o crida a procediment dels llenguatges imperatius. En Prolog no existeixen instruccions de control. La seva execuci?? es basa en dos conceptes: la unificaci?? i el backtracking.

  • Gr??cies a la unificaci??, cada objectiu determina un subconjunt de cl??usules susceptibles d'??sser executades. Cadascuna d'elles es denomina punt d'elecci??. El Prolog selecciona el primer punt d'elecci?? i segueix executant el programa fins determinar si l'objectiu ??s vertader o fals. En cas de ser fals, entra en joc el backtracking.
  • El backtracking consisteix en desfer tot all?? executat i en situar el programa en el mateix estat en el qual es trobava just abans d'arribar al punt d'elecci??. Llavors es pren el seg??ent punt d'elecci?? que estava pendent i es repeteix de nou el proc??s.

Tots els objectius terminen la seva execuci?? b?? sigui en "vertader", b?? sigui en "fals".

[edita] Exemple de Codi Prolog

%%
%% declaracions
%%

parede('joan', 'maria'). % joan ??s pare de maria
parede('pau', 'joan'). % pau ??s pare de joan
parede('pau', 'marcela').
parede('carles', 'debora').

% A ??s fill de B si B ??s pare de A
fillde(A,B) :- parede(B,A).

% A ??s avi de B si A ??s pare de C i C ??s pare B
avide(A,B) :- 
   parede(A,C), 
   parede(C, B).

% A i B s??n germans si el pare de A ??s tamb?? el pare de B i si A i B no s??n el mateix
germade(A,B) :- 
   parede(C,A) , 
   parede(C,B), 
   A \== B.        

% A i B s??n familiars si A ??s pare de B o A ??s fill de B o A ??s germ?? de B
familiarde(A,B) :- 
   parede(A,B).

familiarde(A,B) :-
   fillde(A,B). 

familiarde(A,B) :- 
   germade(A,B).

%%
%% consultes
%%

% joan ??s germ?? de marcela?
?- germade('joan', 'marcela').
yes

% carles ??s germ?? de joan?
?- germade('carles', 'joan').
no

% pau ??s avi de maria?
?- avide('pau', 'maria').
yes

% maria ??s avi de pau?
?- avide('maria', 'pau').
no


[edita] Enlla??os externs


Llenguatges de programaci??
Ada | ALGOL | Assemblador | Awk | Basic| BCPL | C | C++ | C# | Cobol | D | Delphi | Eiffel | Forth | Fortran | Haskell | Java | Lisp | Logo | MAGIC | Mercury | Miranda | Modula-2 | Oberon | Ocaml | Pascal | PHP | Perl | Prolog | Python | Rexx | Ruby | Scala | Smalltalk | Altres llenguatges...