You are on page 1of 7

UFES CEUNES DECOM Engenharia de Computao Linguagens de Programao Prof.

Henrique Monteiro Cristovo

Roteiro e Exerccios para aula prtica de PROLOG


I. Introduo Prolog uma linguagem de paradigma declarativo e lgico. baseada na lgica de predicados e um programa uma coleo de unidades lgicas chamadas predicados. Cada predicado uma coleo de clusulas. Uma clusula uma regra ou um fato. A linguagem Prolog trata as regras como se fossem universalmente quantificadas. As principais aplicao da programao em lgica so: (1) Sistemas Baseados em Conhecimento SBCs, (2) Sistemas de Bases de Dados, (3) Sistemas Especialistas, (4) Processamento da Linguagem Natural, (5) Educao e Modelagem de Arquiteturas No-Convencionais. Para mais detalhes, leia os livros Introduo a Programao Prolog de Luiz A. M. Palazzo disponvel em http://www.lapsi.eletro.ufrgs.br/~marchioro/ParaLingProg/LivroProlog.pdf; e Programao em Prolog: uma abordagem prtica de Eloi L. Fvero disponvel em http://www3.ufpa.br/favero/ II. Software SWI-PROLOG SWI-Prolog uma implementao em cdigo aberto em desenvolvimento contnuo desde 1987 para as plataformas Unix, Windows e Macintosh. O nome SWI derivado de Social-Wetenschappelijke Informatica ("Cincias Sociais Informtica"), o antigo nome do grupo na Universidade de Amsterdo onde seu autor principal trabalha. Download: http://www.swi-prolog.org - selecione Download e Stable release. Manual do SWI-Prolog: http://www.swi-prolog.org/pldoc/refman/ III. Incluso dos fatos a) Digite as clausulas dentro de um arquivo de banco de dados do Prolog (arquivo texto) File New atribua um nome para o arquivo Digite os seguintes fatos (use sempre letras minsculas para fatos, regras e constantes): Obs.: todos os fatos devem ficar agrupados. come(urso,peixe). come(peixe,peixinho). come(peixinho,alga). come(peixe,alga). come(urso,raposa). come(veado,grama). come(peixe,minhoca). come(urso,guaxinim). come(raposa,coelho). come(urso,veado). come(lince,veado). come(planta_carnvora,mosca). come(veado,planta_carnvora). animal(urso). animal(peixe). animal(raposa). animal(veado). animal(minhoca). animal(lince). animal(coelho).

Leitura: urso come peixe

Conjunto de fatos. urso, peixe, peixinho, alga, etc, so constantes

Leitura: urso um animal

1/7

animal(guaxinim). animal(mosca). animal(peixinho). planta(grama). planta(alga). planta(planta_carnvora). b) Salve este arquivo (File Save buffer) no precisa fech-lo c) Compile o programa atravs da opo: Compile Compile buffer d) Faa perguntas ao ambiente (volte janela principal, mas no precisa fechar o editor): come(urso,peixe). come(urso,tigre). animal(planta_carnvora). come(X,peixe). animal(X). come(X,Y). Obs.: Aparecer a resposta Yes confirmando a veracidade da informao. Aparecer a resposta No indicando que esta informao no existe. Planta carnvora animal? No Quais so os elementos que comem peixe? Tecle ; para listar todos. Quais so os elementos com propriedade animal? Quais so todos os elementos que participam da relao come? - Digite sempre aps o prompt ?- Para fazer o prompt reaparecer tecle ponto e ENTER. Use seta para cima para voltar as digitaes anteriores. Tecle ; para obter o prximo item da resposta, caso exista mais de uma.

IV. Incluso das regras a) Tabela de converso: Lgica a b a b a' a b a b (a b)' Significado a e b a ou b negao de a se a ento b a equivalente a b a no equivalente a b Prolog a,b a;b \+a b:-a a=b a\=b (somente para regras)

b) Observe a regra abaixo: Portugus: Carnvoro quem come animal. Lgica: (x)(y)come( x, y) animal ( y) carnivoro( x) Prolog: carnvoro(X):-come(X,Y), animal(Y). Obs.: as regras devem ser digitadas no mesmo arquivo dos fatos.

2/7

c) Escreva as regras no mesmo editor em que esto os fatos. Obs.: as variveis devem ser maisculas %% carnvoro quem como animal carnvoro(X):-come(X,Y), animal(Y). %% herbvoro quem come planta e no come animal herbvoro(X):-come(X,Y),planta(Y),\+carnvoro(X). %% predador carnvoro e tambm animal predador(X):-carnvoro(X),animal(X). %% presa quem comido por predador e tambm animal presa(X):-come(Y,X),predador(Y),animal(X). %% caado quem presa caado(X):-presa(X). %% X pertence a cadeia alimentar de Y pertence_a_cadeia(X,Y):-come(Y,X). pertence_a_cadeia(X,Y):-come(Z,X),pertence_a_cadeia(Z,Y). d) Para fazer perguntas, salve novamente o arquivo (File-Save buffer) e recompile (Compile Compile buffer): Tecle ; (ponto-e-vrgula) para obter o prximo item da resposta. Perguntas em portugus 1. Peixe come peixinho e minhoca? 2. Quais so as plantas? 3. Quem comido pelo urso? 4. Quem come peixe? 5. Quem predador? 6. Quem predador e tambm presa? 7. Quem presa e herbvoro? 8. Quem pertence a cadeia alimentar do urso? 9. Quem pertence a cadeia alimentar do urso e ao mesmo tempo come planta? 10. A minhoca pertence a cadeia alimentar de quem? Perguntas em Prolog come(peixe,peixinho),come(peixe,minhoca). planta(X). come(urso,X). come(X,peixe). predador(X). presa(X),predador(X). presa(X),herbvoro(X). pertence_a_cadeia(X,urso). pertence_a_cadeia(X,urso),herbvoro(X). pertence_a_cadeia(minhoca,X).

3/7

V. Exerccios

1. A partir dos elementos construdos no exemplo sobre cadeia alimentar, crie a regra onvoro. Ela define um animal que come planta e tambm come animal. 2. Suponha os seguintes fatos para registrar a mdia destes alunos:
nota(joao,5.0). nota(maria,6.0). nota(joana,8.0). nota(mariana,9.0). nota(cleuza,8.5). nota(jose,6.5). nota(jaoquim,4.5). nota(mara,-1). nota(mary,11). ...

Construa regras para identificar o estado dos alunos quanto a: aprovado (de 7.0 a 10.0), recuperao (de 5.0 at menor que 7.0), reprovado (de 0.0 a menor que 5.0) e erro se nenhuma das faixas anteriores. Obs.: o operador menor ou igual deve ser escrito como =<. 3. Num banco de dados, feito em Prolog, para registrar relacionamentos afetivos envolvendo o sexo, o gosto por filmes e o gosto por faixa etria do parceiro, e a partir dos fatos informados, escreva as regras pedidas.
homem(pedro). homem(marcos). homem(ze). mulher(maria). mulher(joana). idade(ze,30). idade(maria,40). idade(marcos,20). idade(pedro,25). idade(joana,28). gosta(ze,aventura). gosta(maria,comedia). gosta(joana,romance). gosta(marcos,terror). gosta(marcos,romance). gosta(pedro,romance). gosta(maria,romance).

4/7

opcao(ze,20,40). // significa que o z gostaria de se relacionar com pessoas 20 a 40 anos opcao(maria,25,55). ...

a. afinidade_filme(X,Y) Seleciona pessoas com o mesmo gosto de filme. (sendo X e Y pessoas, X possui o mesmo gosto de filme do que Y) b. casal(X,Y) Seleciona casais (sexos diferentes) c. casal_afinidade_filme(X,Y) Seleciona casais com o mesmo gosto de filme d. casal_afinidade_idade(X,Y) Seleciona casais cujos gostos de faixa etrias sejam atndidos e. casal_total(X,Y) Seleciona casais com afinidade em filme e faixa etria

4. Em Prolog, suponha os seguintes fatos para registrar informaes sobre capitais, estados e regies:
cidade(so_mateus,pequena). cidade(vitria,mdia). cidade(so_paulo,grande). cidade(macei,mdia). cidade(campos,pequena). cidade(cariacica,pequena). cidade(colatina,pequena). ... capital(vitria). capital(macei). capital(sopaulo). ... estado(es,sudeste). estado(al,nordeste). estado(sp,sudeste). ... pertence(so_mateus,es). pertence(vitria,es). pertence(santos,sp). pertence(macei,al). pertence(colatina,es). pertence(cariacica,es). ...

5/7

Escreva sentenas para responder as seguintes perguntas:


a. Qual a capital do Rio Grande do Sul? b. Quais os estados que pertencem a regio Nordeste? c. Quais so todas as cidades pequenas e mdias? d. Quais so as cidades da regio Sudeste?

Crie as seguintes regras:


e. cidade_pequena(X) f. cidade_na_regio_norte(X) g. capital_regio_sul(X) h. cidade_pequena_regio_sudeste(X) i. j. estado_com_capital_grande(X) estado_regio_nordeste_com_capital_mdia(X)

k. cidade_pequena_do_estado(X,Y)

5. Suponha que existe um banco de dados Prolog que fornece informaes sobre peas de um motor de automvel. Os predicados grande(X), pequena(X) e parte_de(X,Y) esto includos.
a. Escreva uma pergunta para encontrar todas as peas pequenas que fazem parte de outras peas. b. Escreva uma pergunta para encontrar todas as peas grandes que so formadas por peas pequenas. c. Formule uma regra para definir pea_tamanho_indefinido(x) como sendo toda pea que no pequena nem grande.

6. Crie um banco de dados para representar as relaes de parentesco da sua famlia. A partir de 4 tipos de fatos (filho ambos os sexos, casado, homem e mulher), crie regras para: pai(X,Y) me(X,Y) neto(X,Y) neta(X,Y) av(X,Y) bisav(X,Y) bisneta(X,Y) irmo(X,Y) irm(X,Y) tia(X,Y) sobrinha(X,Y) primo(X,Y) cunhado(X,Y) sogra(X,Y) genro(X,Y) 6/7

nora(X,Y) enteado(X,Y) primo_segundo_grau(X,Y) Exemplos de alguns fatos possveis:


homem(joo). homem(joaquim) mulher(ana). filho(ana, joo). filho(ana, maria). filho(joaquim,maria). casado(joo, maria).

Neste caso, se for perguntado quais so as irms de Joaquim, em Prolog: irm(X,joaquim). o sistema responder: ana.

7/7