Uma Breve Introdução á programação lógica Inteligência Artificial Wladimir Araújo Tavares
Prolog É uma linguagem simples baseada na lógica simbólica Prolog é uma linguagem interativa projetada para manipulação de dados simbólicos Prolog é baseado em um provador de teoremas para cláusulas Horn.
Exemplos Sócrates é homem. Todo homem é mortal.
Programa homem(socrates) mortal(X) :- homem(X) ?- mortal(socrates). yes
Objetos manipulados pelo Prolog Os objetos manipulados pelo prolog são os termos. Os termos podem ser átomos ou estruturas. Os átomos podem ser constantes ou variáveis.
Variáveis Nas linguagem convencionais as variáveis representa um célula de memória. Em PROLOG uma variável é associada a um objeto. A vantagem da ligação sobre a atribuição está no fato de que qualquer tipo de objeto pode ser ligado a uma mesma variável; não se tem restrições às ligações, pois uma variável não possui estrutura interna.
Estrutura Uma estrutura é um objeto que possui organização interna. Em PROLOG estruturas são representadas por símbolo funcional(lista de argumentos) onde símbolo funcional é um identificador e lista de argumentos é uma lista de termos que pode ser vazia; isto é, um átomo é um caso particular de estrutura.
Exemplo Estrutura livro(gabriela,autor(amado,jorge)) cidade(sao-paulo, pais(brasil))
Programa Prolog mae(antonio, maria). /* fato1 */ mae(pedro, maria). /* fato2 */ mae(jose, ana). /* fato 3 */ pai(antonio,carlos). /* fato 4 */ pai(pedro,jose). /* fato5 */ pai(paulo,jose). /* fato6 */ irmao(X,Y):-pai(X,Z), pai(Y,Z), X\==Y. /* regra1 */ irmao(X,Y):-mae(X,Z), mae(Y,Z), X\==Y. /* regra2 */
?-irmao(antonio,I) irmao(antonio,I):-pai(antonio,Z), pai(I,Z), antonio \== I. irmao(antonio,I):-pai(antonio,carlos),pai(I,carlos),antonio\==I. irmao(antonio,I):-pai(antonio,carlos),pai(antonio,carlos),antonio\==antonio. irmao(antonio,I):-mae(antonio,Z),mae(I,Z),antonio\==I.
amigo(antonio,andre). amigo(andre,juliana). amigo(antonio,maria). amigo(juliana,jose). amigo(X,Y):-amigo(Y,X). ?- amigo(X,Y) X=antonio Y=andre
Recursividade á esquerda amigo(X,Y):-amigo(Y,X). amigo(antonio,andre). amigo(andre,juliana). amigo(antonio,maria). amigo(juliana,jose). ?-?-amigo(X,Y)
fat(0,1). fat(N,F) :- N1 is N-1, fat(N1,F1), F is N*F1.
Lista Uma lista é um termo estruturado que é operado como um conjunto ordenado de elementos. Os elementos podem ser átomos ou termos estruturados, inclusive listas.
Uma operação comum sobre uma lista é dividi-la em sua cabeça e cauda. Há uma notação especial para representar “a lista com cabeça X e cauda Y”: X|Y.
membro(X,[X|_]). membro(X,[_|Y]):-membro(X,Y). add_to_set(X,[],[X]). add_to_set(X,Y,Y) :- member(X,Y). add_to_set(X,Y,[X|Y]). escreve_lista([]). escreve_lista([X|Y]) :- write(':'),write(X),escreve_lista(Y).
binario(1) :- write('1'). binario(X) :- Z is X // 2,binario(Z),N is X mod 2,write(N).
Processamento de linguagem Natural frase :- sujeito predicado sujeito :- artigo substantivo predicado :- verbo artigo substantivo artigo :- o substantivo :- gato j rato verbo :- caçou
frase(L1,L3) :- sintagma_nominal(L1,L2), sintagma_verbal(L2,L3). sintagma_nominal(L1,L3) :- determinante(L1,L2), nome(L2,L3). sintagma_verbal(L1,L3) :- verbo(L1,L2), sintagma_nominal(L2,L3). determinante([o|R],R). nome([homem|R],R). nome([disco|R],R). verbo([vira|R],R).
frase --> sujeito, predicado. sujeito --> artigo(G), substantivo(G). predicado --> verbo, artigo(G), substantivo(G). artigo(m) --> [o]. artigo(f) --> [a]. substantivo(m) --> [gato] | [rato]. substantivo(f) --> [gata] | [rata]. verbo --> [caçou].
frase(L1,L3) :- sintagma_nominal(L1,L2), sintagma_verbal(L2,L3). sintagma_nominal(L1,L3) :- artigo_masculino(L1,L2), nome_masculino(L2,L3). artigo_feminino(L1,L2), nome_feminino(L2,L3). sintagma_verbal(L1,L3) :- verbo(L1,L2), sintagma_nominal(L2,L3). artigo_masculino([o|R],R). artigo_feminino([a|R],R). nome_masculino([homem|R],R). nome_feminino([mulher|R],R). nome([disco|R],R). verbo([vira|R],R).