Você está na página 1de 8

Linguagem Prolog

Everton Lus Berz, Diogo Santinon Faculdades de Informtica de Taquara - Faculdades de Taquara (FACCAT)
{everton, diogo}@faccat.br Resumo. Este artigo descreve um histrico, caractersticas e aplicabilidade da linguagem PROLOG (Programming in Logic). No final do artigo mostrado um exemplo de programa de PROLOG. 1. Histrico O prprio nome, Prolog, j d uma idia: programar em lgica. A hereditariedade do Prolog inclui a pesquisa sobre a inferncia dedutiva sobre clusulas de Horn e outros sistemas automatizados da deduo desenvolvidos nos anos 1960 e nos de 1970, assim Prolog um demonstrador de teoremas que manipula estruturas simblicas, conduzidas por regras de inferncia. O mecanismo de referncia do Prolog baseado no princpio da definio de Robinson (1965) junto com mecanismos para extrair as respostas propostas por Verde (1968). Estas idias vieram juntas forando com os eventos de procedimentos lineares da definio. Os procedimentos lineares objetivo-dirigidos explcitos da definio, tais como aqueles de Kowalski e Kuehner (1971) e Kowalski (1974), deram o mpeto ao desenvolvimento de um sistema de programao da lgica da finalidade geral. O "primeiro" Prolog era de "Prolog Marselha" baseado no trabalho por Colmerauer (1970). A primeira descrio detalhada da lngua do Prolog era o manual para o intrprete do Prolog de Marselha (Roussel, 1975). A outra influncia principal na natureza deste primeiro Prolog era que estava projetada facilitar o processamento de uma lngua natural. O Prolog o exemplo principal de uma quarta gerao de linguagem de programao que suporta o paradigma de programao declarativo. O projeto japons do computador da Quinta-Gerao, anunciado em 1981, adotou o Prolog como uma lngua do desenvolvimento, e focalizou desse modo a ateno considervel na lngua e suas potencialidades. O outro tipo principal do Prolog a famlia de PrologII dos Prologs que so os descendentes do Prolog de Marselha. A referncia a Giannesini, e outros. (1986) usa uma verso de PrologII. H umas diferenas entre estas duas variedades do Prolog; parte da diferena sintaxe, e a parte semntica. A linguagem de programao PROLOG servida por tcnicas declarativas de representao, procura tipo primeiro em profundidade e raciocnio para trs. Esta linguagem alia a lgica e o controle no algoritmo, ou seja, no puramente lgica, mas contm teorias de procura que se enquadram no contexto das evolues em Inteligncia Artificial, o aperfeioamento dos agentes inteligentes. Mas o recurso lgica implica que o conhecimento s possa ser apreendido de forma declarativa e, assim sendo, procedimental, impedindo uma manipulao dos conceitos propriamente dita e restringindo de certa forma o alcance da linguagem, que apesar de trazer vrias vantagens quando comparada com as antigas linguagens est ainda longe de ser completamente satisfatria em termos de representao do conhecimento.

2. Paradigmas de Programao O Prolog uma linguagem de programao lgica e declarativa. 3. Caractersticas Tcnicas Em Prolog o que se define basicamente so objetos e relaes entre esses objetos. Para se referir a objetos, usamos termos. 3.1 Objetos A classificao dos objetos em Prolog mostrada na figura 1.1. Todas as estruturas de dados em Prolog so chamadas de termos. O termo pode ser dividido em: Objetos Simples Constantes: que pode ser um tomo ou um nmero, que designa uma entidade do mundo. Exemplos: Paulo, 3, 'UFPR'. Variveis: uma varivel serve para apontar um objeto desconhecido, mas que existe. Assim que esse objeto ficar conhecido (digamos que a varivel ser instanciada por uma constante), o objeto associado varivel no mudar. Isso diferente do que acontece em programao imperativa, onde o contedo de uma varivel pode mudar. Em Prolog, uma varivel qualquer cadeia que comea por uma letra maiscula. Tambm uma varivel qualquer cadeia que comea pelo smbolo '_' (so variveis annimas). Objetos Estruturados: tambm denominado de termo composto ou simplesmente de estruturas.

Figura 1.1 Objetos em Prolog Objetos compostos ou estruturados: Formada por uma constante funcional (funtor) e argumentos que so termos, ela serve para apontar indiretamente um objeto. Por exemplo, usando um funtor suc e a constante 0, podemos representar os nmeros naturais. O valor 1, que o sucessor de 0, seria representado pelo termo suc(0). O nmero 3 seria representado pelo termo suc(suc(suc(0))). A expresso poderia ser representada pelo termo mult(menos(8,4),3). importante notar que um termo composto essencialmente recursivo, pois ele um termo cujos argumentos so eles mesmos termos. Note que uma varivel pode aparecer em um termo composto. Suponha por exemplo que usamos o funtor pai_de para apontar o pai de uma pessoa. Assim, o termo pai_de(maria) refere ao pai de Maria. Nada impede escrever o termo pai_de(X), que aponta um objeto que o pai de algum.

Prolog uma linguagem de programao que utilizada para resolver problemas que envolvam objetos e relaes entre objetos. Um programa em Prolog consiste basicamente de: declarao de fatos (facts) sobre objetos e suas relaes; definies de regras (rules)sobre os objetos e suas relaes; questes (goals) que so feitas sobre os objetos e suas relaes 3.2 tomos Da mesma forma que o Portugus, Prolog possui palavras e frases. O tipo de palavra mais comum em Prolog denominado tomo. Alguns exemplos de tomos so: lpis, ana, brasil, livro, tesoura, guarda-roupa. Note que os tomos comeam com letra minscula at mesmo quando so nomes prprios. 3.3 Predicados Predicado a construo usada para declarar algo a respeito de objetos. Em Prolog, a declarao representada por um tomo e seguida pelos objetos, que devem ser colocados entre parnteses e estar separados uns dos outros por vrgulas. Exemplos: rob(piter) homem(silvestre) mulher(ndia) construiu(silvestre,piter) pai(silvestre,ndia) Quando existe apenas um objeto no predicado, a declarao quase sempre uma caracterstica desse objeto. Sendo assim, o predicado rob(piter) declara que o objeto Piter possui a caracterstica de ser um rob. Analogamente, homem(silvestre) informa que Silvestre homem e mulher(ndia) transmite a idia de que Ndia mulher. Nos predicados com dois ou mais objetos, a declarao pode ser tanto uma relao entre os referidos objetos quanto nomear uma ao da qual eles participaram. No caso de pai(silvestre,ndia), declara-se que uma relao paternidade liga Silvestre a Ndia e, portanto, que Silvestre pai de Ndia. J o predicado construiu(silvestre,piter), significa que Silvestre construiu Piter ou, mais precisamente, que Silvestre e Piter participaram da ao de construir. 3.4 Frases As frases mais simples da linguagem Prolog so constitudas por um nico predicado. Quando estas frases so usadas para dizer alguma coisa ao computador, elas so afirmativas e terminam com um ponto final. A seguir mostramos vrios exemplos de frase afirmativas. rob(piter). homem(silvestre). homem(hadar). homem(asrat). mulher(ndia). pai(silvestre,ndia). ama(ndia,hadar). ama(hadar,ndia). H tambm frases que servem para perguntar algo ao computador. Estas frases so chamadas interrogativas, comeam por um ponto de interrogao seguido do sinal de menos e terminam com um ponto final. A seguir temos alguns exemplos de frases interrogativas

com as seguintes respostas. As respostas, que esto sublinhadas, foram dadas pelo computador e so baseadas nos exemplos de frases afirmativas. ?-ama(ndia,piter). no ?-ama(ndia,hadar). Yes 3.5 Regras As regras so utilizadas para construir relaes entre fatos, explicitando as dependncias entre eles. Ao contrrio dos fatos, que so incondicionais, as regras especificam coisas que podem ser verdadeiras se algumas condies forem satisfeitas. As regras possuem duas partes: o corpo, que define as condies e se encontra na parte direita da regra; a cabea, que define a concluso, e se encontra na parte esquerda da regra. A cabea e o corpo so separados pelo smbolo ":-", que lido como "se". Uma regra sempre terminada com um ponto final. Exemplo : gosta (joo, X) :- gosta (X, vinho). gosta (joo, X) :- gosta (X, vinho), gosta (X, comida). filho (X, Y) :- homem (X), genitor(Y, X). Nas regras tambm ocorre o retrocesso: caso um sub-goal no seja satisfeito, o Prolog tenta modificar o valor das variveis instanciadas para procurar uma resposta vlida. A diferena entre se fazer uma questo com valores especificados e uma questo com variveis que no segundo caso as variveis da regra que correspondem s variveis no instanciadas na questo, continuaro no instanciadas, permitindo o retrocesso. 3.6 Disjuno("OU") A disjuno (o "OU" lgico) representada no Prolog quando se declara mais de uma regra para determinar uma mesma relao. Isso ocorre porque na busca de uma soluo, o Prolog automaticamente procura as regras que podem ser aplicadas quando uma regra falha. 4. Aplicabilidade da LP Lgica matemtica, prova automtica de teoremas e semntica; Soluo de equaes simblicas; Bancos de dados relacionais; Linguagem Natural; Sistemas Especialistas; Planejamento Automtico de Atividades; Aplicaes de "General Problem Solving", como jogos (Xadrez, Damas, Jogo da Velha, etc.); Compiladores; Anlise Bioqumica e projetos de novas drogas. Sistemas de alocao de tempos e espaos, diagnsticos, aconselhamento, reconhecimento de padres; Desenvolvimento de layout,

Sistemas de planejamento, entendimento, educao, roteiros;

5. Exemplo de Programa % Imagine 5 casas de 5 diferentes cores. Em cada casa mora uma % pessoa de uma nacionalidade diferente, sendo que esses 5 % proprietrios bebem diferentes bebidas, fumam diferentes tipos % de cigarro e tm um certo animal de estimao. Observa-se que nenhum % deles tm o mesmo animal, nem fumam o mesmo cigarro e nem bebem a % mesma bebida. Sabe-se que: % % O ingls vive na casa vermelha. % O sueco tem cachorros como animais de estimao. % O dinamarqus bebe ch. % A casa verde fica esquerda da casa branca. % O dono da casa verde bebe caf. % A pessoa que fuma Pall Mall cria pssaros. % O dono da casa amarela fuma Dunhill. % O homem que vive na casa do centro bebe leite. % O noruegus vive na primeira casa. % O homem que fuma Blends vive ao lado do que tem gatos. % O homem que cria cavalos vive ao lado do que fuma Dunhill. % O homem que fuma Bluemaster bebe cerveja. % O alemo fuma Prince. % O noruegus vive ao lado da casa azul. % O homem que fuma Blend vizinho do que bebe gua. % % A questo : quem tem o peixe? peixe( casa(Cor1, Nacionalidade1, Animal1, Bebida1, Cigarro1), casa(Cor2, Nacionalidade2, Animal2, Bebida2, Cigarro2), casa(Cor3, Nacionalidade3, Animal3, Bebida3, Cigarro3), casa(Cor4, Nacionalidade4, Animal4, Bebida4, Cigarro4), casa(Cor5, Nacionalidade5, Animal5, Bebida5, Cigarro5) ):% regra 1: O ingls vive na casa vermelha. ( (Cor1=vermelho, Nacionalidade1=britanico); (Cor2=vermelho, Nacionalidade2=britanico); (Cor3=vermelho, Nacionalidade3=britanico); (Cor4=vermelho, Nacionalidade4=britanico); (Cor5=vermelho, Nacionalidade5=britanico) ), % regra 2: O sueco tem cachorros como animais de estimao.. ( (Nacionalidade1=sueco, Animal1=cachorro); (Nacionalidade2=sueco, Animal2=cachorro); (Nacionalidade3=sueco, Animal3=cachorro);

(Nacionalidade4=sueco, Animal4=cachorro); (Nacionalidade5=sueco, Animal5=cachorro) ), % regra 3: O dinamarqus bebe ch. ( (Nacionalidade1=dinamarques, Bebida1=cha); (Nacionalidade2=dinamarques, Bebida2=cha); (Nacionalidade3=dinamarques, Bebida3=cha); (Nacionalidade4=dinamarques, Bebida4=cha); (Nacionalidade5=dinamarques, Bebida5=cha) ), % regra 4: A casa verde fica esquerda da casa branca. ( (Cor1=verde, Cor2=branco); (Cor2=verde, Cor3=branco); (Cor3=verde, Cor4=branco); (Cor4=verde, Cor5=branco) ), % regra 5: O dono da casa verde bebe caf. ( (Cor1=verde, Bebida1=cafe); (Cor2=verde, Bebida2=cafe); (Cor3=verde, Bebida3=cafe); (Cor4=verde, Bebida4=cafe); (Cor5=verde, Bebida5=cafe) ), % regra 6: A pessoa que fuma Pall Mall cria pssaros. ( (Cigarro1=pall_Mall, Animal1=passaros); (Cigarro2=pall_Mall, Animal2=passaros); (Cigarro3=pall_Mall, Animal3=passaros); (Cigarro4=pall_Mall, Animal4=passaros); (Cigarro5=pall_Mall, Animal5=passaros) ), % regra 7: O dono da casa amarela fuma Dunhill. ( (Cor1=amarelo, Cigarro1=dunhill); (Cor2=amarelo, Cigarro2=dunhill); (Cor3=amarelo, Cigarro3=dunhill); (Cor4=amarelo, Cigarro4=dunhill); (Cor5=amarelo, Cigarro5=dunhill) ), % regra 8: O homem que vive na casa do centro bebe leite. ( (Bebida3=leite) ), % regra 9: O noruegus vive na primeira casa. ( (Nacionalidade1=noruegues) ), % regra 10: O homem que fuma Blends vive ao lado do que tem gatos.

( (Cigarro1=blends, Animal2=gatos); (Cigarro2=blends, Animal1=gatos); (Cigarro2=blends, Animal3=gatos); (Cigarro3=blends, Animal2=gatos); (Cigarro3=blends, Animal4=gatos); (Cigarro4=blends, Animal3=gatos); (Cigarro4=blends, Animal5=gatos); (Cigarro5=blends, Animal4=gatos) ), % regra 11: O homem que cria cavalos vive ao lado do que fuma Dunhill. ( (Animal1=cavalo, Cigarro2=dunhill); (Animal2=cavalo, Cigarro1=dunhill); (Animal2=cavalo, Cigarro3=dunhill); (Animal3=cavalo, Cigarro2=dunhill); (Animal3=cavalo, Cigarro4=dunhill); (Animal4=cavalo, Cigarro3=dunhill); (Animal4=cavalo, Cigarro5=dunhill); (Animal5=cavalo, Cigarro4=dunhill) ), % regra 12: O homem que fuma Bluemaster bebe cerveja. ( (Cigarro1=bluemasters, Bebida1=cerveja); (Cigarro2=bluemasters, Bebida2=cerveja); (Cigarro3=bluemasters, Bebida3=cerveja); (Cigarro4=bluemasters, Bebida4=cerveja); (Cigarro5=bluemasters, Bebida5=cerveja) ), % regra 13: O alemo fuma Prince. ( (Nacionalidade1=alemao,Cigarro1=prince); (Nacionalidade2=alemao,Cigarro2=prince); (Nacionalidade3=alemao,Cigarro3=prince); (Nacionalidade4=alemao,Cigarro4=prince); (Nacionalidade5=alemao,Cigarro5=prince) ), % regra 14: O noruegus vive ao lado da casa azul. ( (Nacionalidade1=noruegues, Cor2=azul); (Nacionalidade2=noruegues, Cor1=azul); (Nacionalidade2=noruegues, Cor3=azul); (Nacionalidade3=noruegues, Cor2=azul); (Nacionalidade3=noruegues, Cor4=azul); (Nacionalidade4=noruegues, Cor3=azul); (Nacionalidade4=noruegues, Cor5=azul); (Nacionalidade5=noruegues, Cor4=azul) ), % regra 15: O homem que fuma Blend vizinho do que bebe gua. ( (Cigarro1=blends, Bebida2=agua);

(Cigarro2=blends, Bebida1=agua); (Cigarro2=blends, Bebida3=agua); (Cigarro3=blends, Bebida2=agua); (Cigarro3=blends, Bebida4=agua); (Cigarro4=blends, Bebida3=agua); (Cigarro4=blends, Bebida5=agua); (Cigarro5=blends, Bebida4=agua) ). %Fim do programa A verso em arquivo do programa est disponvel em http://fit.faccat.br/~everton/lp/peixe.pl . Para executar o programa siga os seguintes passos: 1. Instale o SWI-Prolog, disponvel em http://www.swi-prolog.org 2. V at o diretrio onde se encontra o arquivo com o programa e digite pl 3. Digite: [peixe]. (no esquea do "." no final) 4. Digite: peixe(casa(Cor1, Nacionalidade1, Animal1, Bebida1, Cigarro1), casa(Cor2, Nacionalidade2, Animal2, Bebida2, Cigarro2), casa(Cor3, Nacionalidade3, Animal3, Bebida3, Cigarro3), casa(Cor4, Nacionalidade4, Animal4, Bebida4, Cigarro4), casa(Cor5, Nacionalidade5, Animal5, Bebida5, Cigarro5) ). (novamente no esquea do ".") Para sair do Prolog tecle Ctrl + C, e logo depois a tecla 'e'. 6. Bibliografia http://ia.ucpel.tche.br/~lpalazzo/Prolog/Pagina/pl01.htm http://www.di.ubi.pt/~pmoura/ensino/pl0203/ http://www.intranet.csupomona.edu/%7Ejrfisher/www/prolog_tutorial/pt_framer.html http://www.din.uem.br/ia/ferramen/prolog/ http://www.dcc.fua.br/~dcc_lp/p_logica/prolog/lp_prolog.html http://www2.dem.inpe.br/gadelha/Prolog02.doc http://www.dcc.unicamp.br/~meidanis/courses/mc600/199702/ http://www.cos.ufrj.br/~naborges/prolog.html http://vl.fmnet.info/logic-prog/#Prolog

Você também pode gostar