Você está na página 1de 27

CENTRO UNIVERSITRIO LUTERANO DE PALMAS

PROLOG
Elias Melgao Chaves Jnior Jonatas Luiz da Costa Rafael Gonalves Barreira

Roteiro
Linguagens de Programao em Lgica: histrico THIS IS PROLOG!!!! SWI-Prolog ewrite ('Hello world!!!') Termos Fatos Consulta Regras Recursividade Listas

Linguagens de Programao em lgica: Histrico


Estudos doraciocniolgico de Boole (1815-1864) e de De Morgan (1806-1871) . Gttlob Frege (1879) cria a primeira verso do calculo de predicados. Em 1930Kurt Gdel e Jacques Herbrand, em estudos separados,demonstraram que o mecanismo de prova do clculo de predicados poderia oferecer uma provaformal de toda proposio logicamente verdadeira. Em 1939 a teoria estava O.K., faltava a pratica.

Histrico (Continuao)
Dcada de 50: clculo de predicados comeou a ser computacionalmente vivel; Em 1958, a forma clausal comeou a despertar o interesse dos estudiosos do assunto; Em 1960 Dag Prawitz props a "Unificao", um novo tipo de operao sobre os objetos do clculo de predicados; Em 1972 Alain Colmerauer criou o "Prolog - Programmation en Logique", primeiro interpretador experimental de Prolog, na Universidade de Aix-Marseille

E agora o Prolog (continuao)


Implementaes mais "praticas" foram desenvolvidas por Battani e Meloni (1973), Bruynooghe (1976) e, principalmente, David H. D. Warren, Lus Moniz Pereira e outros pesquisadores da Universidade de Edimburgo em 1977.

Pausa para apresentar o programa


Interpratador utilizado: SWI-Prolog

write('Hello World!!!')
Sada: Hello World!!! true.

(WTF???)

Diferenas entre programao convencional e programao em lgica


PROGRAMAS CONVENCIONAIS Processamento Numrico SoluesAlgortmicas Estruturas de Controle e Conhecimento Integradas Dificil modificao Somente respostas totalmente corretas Somente a melhor soluo possvel PROGRAMAS EM LGICA Processamento Simbolico Solues Heursticas Estruturas de Controle e Conhecimento Separadas Fcilmodificao Incluem respostas parcialmente corretas Incluem todas as solues possiveis

THIS IS PROLOG!!!!!!!!
Prolog uma linguagem de programao em lgica

Algumas caracteristas do Prolog


Especificao so programas Capacidade dedutiva No-Determinismo Reversibilidade das relaes [nfaseaqui] 3 formas de interpretao [muito legaltambm] Recursividade [mais legal ainda]

As Interpretaes
Declarativa. As Clusulas* so vistas como descrio do problema Procedimental As Clusulas so vistas como entrada para um mtodo Operacional As Clusulas so vistascomo comandospara um procedimento de prova por refutao

* So as sentenas lgicas, e sero vistas mais adiante.

Termos no Prolog
Todos os objetos no Prolog so denominados termos Alguns termos: tomo Numero Varivel Fato Regra

Fatos*
So fatos!!! Representam um sentena verdadeira no PROLOG para o universo do problema em questo. Alguns fatos: Dunha est vivo, Joo conhece o Mrio .... De forma logica porderia ser interpretado como: Vd (onde: V=vivo e d=dunha) Cjm (onde: C=conhece, j=joo e m=mrio) e no prolog (tem que ser minsculo mesmo*): vivo(dunha).* conhece(joo,mrio).

* exemplo de clsula

Consultas
perguntas ao sistema PROLOG comea com "?-" (sem aspas) Infere resultados com base nas clusulas existentes, verificando se a consulta valida ou no Momento alt + tab Variaveis: Representam objetos genricos eseu uso alterar a sada do processamento. Comeam com a primeira letramaiscula. Mais um alt + tab

Regras* (P -> Q)
Relao causa-conseqncia, sendo que oconseqente informado antes doantecedente. considerando os fatos sobre paternidade** criar uma regra para a relao "av"

* outro tipo de clusula ** calma que vai haver parte pratica

Regras (continuao)
Interpretao: "Uma pessoa av de outra, se a primeira for pai de um terceira pessoa, e essa terceira pessoa for pai da segunda" Formalizando: para todo X e Y X av de Y se X for pai de Z e Z for pai de Y.

Regras (episodio 3: o retorno)


E o cdigoem Prolog: avo(X,Y) :- pai(X,Z), pai(Z,Y).

l e de volta novamente: outro alt + tab operadores logico: not() -> negao "," -> conjuno ";" -> disjuno

Recursividade
Criar um termo (nome de todos os objetos do Prolog) que use oprpriotermo na sua definio. Implementar a relao antepassado usando asdefiniesde paternidade. Momento alt + tab

"Para se entender a recursividade, tem que se entender a recursividade" #noRT

"Backtracking"
As consultas so organizadas em arvores de busca. Navegao em pr ordem.

Caminho executado pelobacktracking, um percurso em pr-ordem.

"Backtracking"

a, b, e, (b), f, g, (f), h, (f), i, (f), (b), (a), c, (a), d onde o caminho em backtracking representado entre parnteses

"Backtracking"
gosta(joo, jazz). gosta(joo, renata). gosta(joo, lasanha). gosta(renata, joo). gosta(renata, lasanha). Pergunta: ?-gosta(joo, X), gosta(renata, X). X = lasanha.

Listas
[umObjeto,outroObjeto,xis,dabliu] isso acima uma lista em Prolog, umcoleodelimitada por colchetes e separados porvrgula. como todo objeto Prolog na verdade uma arvore. existe listas vazias representadas por "[]" (sem aspas) e existe listas no vazias Uma lista no vazia composta de: cabea: qualquer objeto Prolog corpo: outra lista representado por: (cabea,corpo)

Representaoda lista como rvore

Listas: a criao
listas vazias: [ ] lista com os valores: [a,b,c,d] formato cabea-corpo: [H|B] , onde: H um elemento cabea B uma outra lista

Listas: Implementaes
Verficar se um objeto membro de um lista (uso de variavel anonima) membro(X,L). / X o elemento e L a lista Concatenar listas concatenar(X,Y,Z). / todos sao listas e Z resultado Remover elemento de uma lista removerInicio(X,L,Z). / Z a lista L sem X Inverter a lista inverter(X,Y). / Y a lista X invertida verificar se uma lista de letras palndromo palindromo(X). / X uma lista de letras

Referncias bibliograficas
PALAZZO, Luiz A. M.Introduo programao Prolog. 1997. Disponivel em: <http://www2.comp.ufscar. br/~bruno_katekawa/PLP/Prolog/prolog%20livro.pdf>. Acesso: 17 maio 2010.

CENTRO UNIVERSITRIO LUTERANO DE PALMAS

PROLOG
Elias Melgao Chaves Jnior Jonatas Luiz da Costa Rafael Gonalves Barreira

Você também pode gostar