Você está na página 1de 5

Introduo ` Linguagem Prolog ca a

Prof. Dr. Silvio do Lago Pereira


slago@ime.usp.br

Introduo ca

Prolog (programming in logic) [1,2,5] uma linguagem de programaao dee c clarativa, baseada em clusulas de Horn, que tem o algoritmo Sld-Resoluc ao a embutido. Enquanto numa linguagem de programaao imperativa um programa c consiste numa descriao detalhada de como um determinado problema deve ser c solucionado, em Prolog, um programa apenas um conjunto de sentenas que e c declaram o conhecimento que temos a cerca de um determinado contexto. Uma vez que essas sentenas sejam fornecidas ao sistema Prolog, o usurio pode conc a sult-lo, fazendo perguntas cujas respostas sero deduzidas, automaticamente, a a a partir do conhecimento que foi declarado pelas sentenas. c 1.1 Fatos, regras e consultas

Para introduzir os elementos bsicos da linguagem Prolog, vamos usar como a exemplo um famoso argumento de lgica clssica: o a Scrates um homem. o e Todo homem mortal. e Logo, Scrates mortal. o e Nesse argumento, as duas primeiras sentenas so premissas, enquanto a ultima c a delas uma concluso. Claramente, essa concluso pode ser deduzida das pree a a missas. Ento, como o sistema Prolog implementa um algoritmo de racioc a nio dedutivo, se fornecermos a ele essas premissas e perguntarmos se Scrates moro e tal ele dever responder que sim. Para tanto, a primeira coisa que temos a fazer a escrever as premissas numa forma que elas possam ser entendidas pelo sistema. e Escrevendo as premissas em Prolog, obtemos o seguinte programa: Programa 1 Filsofos o
homem(scrates). o mortal(X) :- homem(X).

Com relaao a notaao lgica usada nas clusulas de Horn, as diferenas c ` c o a c sintticas em Prolog so pequenas: primeiro, todas as clusulas devem nalizar a a a com ponto; segundo, o operador substitu pelo operador :-; e, terceiro, e do nos fatos, o operador omitido. e

S. L. Pereira

No Programa 1, a clusula a homem(scrates). o estabelece um fato e deve ser lida como Scrates um homem. Por outro lado, o e a clusula a mortal(X) :- homem(X). estabelece uma regra e deve ser lida como X mortal se X um homem. Um e e programa em Prolog nada mais do que um conjunto de fatos e regras. e Para executar o Programa 1, entramos no sistema Swi-Prolog1 e, ao sinal de prontido desse sistema, digitamos emacs(filsofos.pl), seguido de ponto a o e enter. Isso far com que o editor Emacs seja aberto para a criaao do arquivo 2 a c filsofos.pl. Em seguida, digitamos as clusulas que compem o programa e o a o compilamos (usando a opao compile buer, no menu compile, do editor Emacs). c Se nenhum erro de digitaao tiver sido cometido, o sistema informar que o proc a grama foi corretamente compilado e que est pronto para ser consultado. a
filsofos.pl compiled, 0.01 sec, 588 bytes. o yes ?-

Para testar o sistema, podemos comear com a seguinte consulta: c


?- homem(scrates). o

ou seja, Scrates um homem?. A essa consulta o sistema responder yes, j o e a a que esse fato foi explicitamente estabelecido pela primeira clusula do Programa a 1. Outra consulta que podemos fazer Scrates mortal?: e o e
?- mortal(scrates). o

Dessa vez, embora o fato mortal(scrates) no tenha sido explicitamente estabeo a lecido, o sistema pode deduzi-lo a partir das clusulas do programa filsofos.pl. a o Sendo assim, a resposta para essa segunda consulta tambm ser yes. e a 1.2 A hiptese do mundo fechado e a negao por falha nita o ca

Conforme vimos, o sistema Prolog capaz de responder positivamente a rese peito de informaoes que lhe comunicamos explicitamente, atravs de fatos, ou c e implicitamente, atravs de regras. Mas o que acontece se lhe consultarmos sobre e algo que no lhe foi comunicado? Por exemplo, ainda considerando o Programa a 1, poder amos fazer a seguinte consulta:
1 2

Download dispon em http://www.swi-prolog.org. vel Apenas arquivos com extenso .pl so reconhecidos como programas em Prolog. a a

Introduao a Linguagem Prolog c ` ?- mortal(plat~o). a

ou seja, Plato mortal?. A essa pergunta o sistema responder no. Ena e a tretanto, essa resposta no signica que Plato seja imortal, mas apenas que o a a sistema no dispe de conhecimento suciente para armar que Plato mora o a e tal. Esse tipo de resposta negativa baseada na hiptese do mundo fechado [4], e o segundo a qual o sistema pode supor que conhece todos os fatos verdadeiros a respeito do mundo. De acordo com essa hiptese, se um fato no foi comunicado o a ao sistema, seja expl cita ou implicitamente, o sistema pode assumir que esse fato falso. e Devido a implementaao da hiptese do mundo fechado, o Prolog um ` c o e sistema lgico no-monotnico, i.e., a adiao de novas premissas pode descartar o a o c concluses anteriormente obtidas. Por exemplo, se adicionarmos ao programa o filsofos.pl o fato homem(plat~o), e repetirmos a consulta ?- mortal(plat~o), o a a o sistema responder yes. Ou seja, a resposta do sistema a uma consulta a depende do conhecimento que ele tem a respeito do contexto de discurso: se esse conhecimento muda, suas respostas tambm podem mudar. e A negaao em Prolog, conhecida como negaao por falha3 , tambm imc c e e plementada com base na hiptese do mundo fechado. Quando o sistema tem o que responder a respeito de um fato negativo, primeiro ele verica se esse fato e verdadeiro. Caso o fato seja verdadeiro, ele responde no; seno, ele responde a yes. Por exemplo, a consulta: `
?- not( mortal(scrates) ). o

o sistema responder no, j que o fato mortal(scrates) verdadeiro. Por a a o e outro lado, a consulta: `
?- not( mortal(zeus) ).

o sistema responder yes, j que o fato homem(zeus) no foi comunicado ao sisa a a tema e, portanto, de acordo com a hiptese do mundo fechado, deve ser assumido o como sendo falso.

1.3

Consultas com variveis a

Veremos agora que o Prolog capaz de responder mais do que simplesmente e yes ou no. Por exemplo, suponha que desejamos saber quem (X)4 mortal: e
?- mortal(X).
3

A negaao de um fato considerada verdadeira se o sistema falha ao tentar provar c e que esse fato verdadeiro. e No Prolog, todo identicador iniciando com maiscula considerado uma varivel. u e a

S. L. Pereira

Nesse caso, no basta que o sistema responda yes. Ser preciso que ele informe a a quem mortal, ou seja, ele dever encontrar um valor apropriado para a varivel e a a X, que ser a resposta a nossa pergunta. Portanto, ele responder X = scrates. a ` a o Caso haja mais de uma resposta poss vel, o sistema exibir a primeira delas e a car aguardando instruoes: se digitarmos ponto-e-virgula, ele tentar encontrar a c a uma resposta alternativa; se digitarmos enter, ele encerrar a consulta. a Por exemplo, supondo que o fato homem(plat~o) tenha sido inclu no proa do grama filsofos.pl, o sistema fornecer as seguintes respostas: o a
?- mortal(X). X = scrates ; o X = plat~o a yes

Exerc cio 1 Codique as clusula a seguir em Prolog e consulte o sistema a para descobrir o que saudvel. e a bebe(ze, pinga) bebe(mane, agua) vivo(mane) saudavel(X) bebe(Y, X), vivo(Y ) Exerc cio 2 Codique as clusula a seguir em Prolog e consulte o sistema a para descobrir que idiomas a Ana fala e que idiomas o Yves fala. nasceu(ana, brasil) nasceu(yves, f rance) idioma(brasil, portugues) idioma(f ranca, f rances) idioma(inglaterra, ingles) estudou(ana, f rances) estudou(ana, ingles) estudou(yves, ingles) f ala(A, C) nasceu(A, B), idioma(B, C) f ala(D, E) estudou(D, E) Exerc cio 3 Codique as clusula a seguir em Prolog e consulte o sistema a para descobrir quem irmo de Cain (no Prolog o predicado de desigualdade e a escrito como \=). e pai(adao, cain) pai(adao, abel) pai(adao, seth) irmao(X, Y ) pai(Z, X), pai(Z, Y ), X = Y

Introduao a Linguagem Prolog c `

Exerc cio 4 Codique as clusula a seguir em Prolog e consulte o sistema a para descobrir quem namora com quem e quem inel. e gosta(ary, eva) gosta(ary, bia) gosta(ivo, ana) gosta(ivo, eva) gosta(eva, ary) gosta(ana, ary) namora(A, B) gosta(A, B), gosta(B, A) inf iel(C) namora(C, D), gosta(C, E), D = E Exerc cio 5 Imagine um contexto denido pelos seguintes predicados: mora(P essoa, Bairro) : relaciona uma pessoa ao bairro em que ela mora pertence(Bairro, Zona) : relaciona um bairro a zona a qual ele pertence ` ` amigo(P essoa, P essoa) : relaciona duas pessoas que so amigas a e tem carro(P essoa) : discrimina as pessoas que tm carro

Crie uma coleao de fatos a respeito desses predicados (invente os dados) e c dena uma regra estabelecendo que uma pessoa pode dar carona a outra se essa pessoa tem carro e ambas moram em bairros que cam na mesma zona. Em seguida, faa consultas ao sistema Prolog e verique se as respostas obtidas c so coerentes com os dados declarados. a

Referncias e
1. Amble, T. Logic Programming and Knowledge Engineering, Addison-Wesley, 1987. 2. Bratko, I. Prolog - Programming for Articial Intelligence, Addison-Wesley, 1990. 3. Genesereth, M. R. and Nilsson, N. J. Logical Fundations of Articial Intelligence, Morgan Kaufmann Publishers, 1988. 4. Reiter, R. On Closed Word Data Bases, In H. Gallaire and J. Minker, Logic and Data Bases, pages 55-76, Plenum Press, NY, 1978. 5. Sterling, L. and Shapiro, E. The Art of Prolog, MIT Press, 1986.

Você também pode gostar