Você está na página 1de 18

Perodo: 2 Semestre de 2003 Disciplina: Inteligncia Artificial IA (wwwp.fc.unesp.br/~simonedp/discia.htm) Professora: Simone das Graas Domingues Prado (simonedp@fc.unesp.

br)

Apostila 01 Assunto:
Contedo:

Linguagem de Programao - PROLOG

1. Introduo 2. Tipos de Dados 3. Estruturas de Controle do Programa 4. Aritmtica e Expresses Aritmticas 5. Alguns Comandos 6. Exerccios de Prolog 7. Listas 8. Unificao de Listas 9. Problemas resolvidos de Listas 10. Exerccios de Listas

1. Introduo
A linguagem de programao Prolog representa o conhecimento de forma lgica como o prprio nome indica: PROgramming in LOGic. Ela foi criada por Colmerauer e Roussel em 1972, sendo sua primeira verso em Fortran por Battani e Meloni em 1973. Desde ento tem sido utilizada para aplicaes em computao simblica. A linguagem Prolog constituda basicamente de predicados ( mostra as relaes entre os objetos ), regras ( estruturao do conhecimento ) e variveis ( os objetos ). Inicialmente sero mostrados os tipos de dados que se poder usar um programa em Prolog. Depois sero vistos as estruturas de controle, as expresses aritmticas e alguns comandos.
________________________________________________________________________________________________ Pgina 1 de 18 Inteligncia Artificial Simone Domingues Prado Apostila 01

2. Tipos de dados:
variveis no variveis atmicas tomos inteiros nmero de ponto flutuante strings listas estruturas

no atmicas

2.1. Variveis: o nome de uma varivel pode ser qualquer seqncia de caracteres alfanumricos que comea com uma letra maiscula ou com um underscore ( _ ). Se usar somente o underscore( _ ) no predicado significar que voc no quer saber o valor, so as chamadas variveis annimas. as variveis podem se unificar com um valor definido (um tomo) ou outra varivel (s que ficam dependentes uma da outra, uma guarda o endereo da outra). 2.2. tomos: So constantes textuais. Podem conter letras, nmeros ou smbolos. Ex: tenis, Tenis, 12, marys, Marys (Obs: Se o tomo comear com letra maiscula ou se for um nmero deve-se usar aspas simples. Se o tomo tiver apstrofo usa-se duas aspas. ) 2.3. Nmeros inteiros: So os permitidos pelo computador: positivos e negativos. Caracteres ASCII so tambm considerados inteiros se colocar aspas simples antes da letra: a = 97
________________________________________________________________________________________________ Pgina 2 de 18 Inteligncia Artificial Simone Domingues Prado Apostila 01

2.4. Nmeros de ponto flutuante: So os permitidos pelo computador: positivos e negativos. Esses nmeros devem ter pelo menos uma casa depois do ponto decimal definida: 5.0 (est correto) e 7. (no est correto) Pode-se definir expoentes da base dez usando a letra E(e): -8.3 e 21 2.5. Strings: So constantes usadas para manipular texto. Ela dever estar entre $ ou entre aspas. Ex: $Ele foi ao cinema$ ou 'Ele foi ao cinema' 2.6. Estruturas: So tipos de dados que podem ser usados para agrupar ou expressar uma relao entre os termos. Ex: aniversrio(jos,5,maio,1985) nasceu(jos,braslia) amigo(maria, estela) As estruturas nas Regras do PROLOG Se algum nasceu entre 20/jan e 18/fev Ento ele de aqurio No Prolog o raciocnio seria ao contrrio: Ele de aqurio Se ele nasceu entre 20/jan e 18/fev A palavra se da regra representado no Prolog com o smbolo :-. Assim, signo(Pessoa,aqurio):aniversrio(Pessoa,Dia,Mes), Dia > = 20, Mes = 'janeiro'. signo(Pessoa,aqurio):aniversrio(Pessoa,Dia,Mes), Dia = < 18, Mes = 'fevereiro'.
________________________________________________________________________________________________ Pgina 3 de 18 Inteligncia Artificial Simone Domingues Prado Apostila 01

** Todas as variveis so locais s estruturas ** Passam-se variveis para outra estrutura pelos argumentos ** Conectivos e tornam-se vrgulas ** Conectivos ou tornam-se ponto e vrgulas

2.7. Listas: uma lista uma seqncia de elementos ordenados cada elemento da lista separado por uma vrgula e o conjunto colocado entre colchetes: [ a, b, c] Uma caracterstica principal dessas listas que se pode separar a cabea da lista (1o. elemento) da cauda (demais elementos), e assim poderamos escrever: [a | b, c ] uma lista de caracteres uma lista que tem notao prpria: abc = [97,98,99]

3. Estruturas de controle do programa:


, ; conjuno de metas. Se uma clusula contm uma seqncia de metas, separadas por vrgula, todas elas devem ser satisfeitas para que a clusula seja satisfeita. disjuno de metas. Se uma clusula contm uma seqncia de metas, separadas por ponto e vrgula, ao menos uma meta deve ser satisfeita para que a clusula seja satisfeita. not P negao P or Q operador lgico P and Q operador lgico

4. Aritmtica e expresses aritmticas


tem-se os normais: +, -, *, ^, cos, exp, ln, log, sin, sqrt, mod, round, etc x / y = diviso normal com resultado em ponto flutuante (se necessrio) x // y = diviso inteira os nmeros inteiros quando relacionados numa expresso com nmeros de ponto flutuante so transformados para nmeros de ponto flutuante os nmeros de ponto flutuante podem ser convertidos para nmeros inteiros: integer(X)
________________________________________________________________________________________________ Pgina 4 de 18 Inteligncia Artificial Simone Domingues Prado Apostila 01

os nmeros inteiros podem ser convertidos em nmeros de ponto flutuante: float (X) Atribuio: A is ln(X) write(A) Avaliaes para nmeros: relacionais comuns: >, <, > =, = < X is E1: se X j tiver um valor, verifica se X(varivel) unifica com E1(expresso) E1 =:= E2 : avalia E1 e E2 verificando se o resultado das expresses igual E1 =\= E2 : avalia E1 e E2 verificando se o resultado das expresses diferente

5. Alguns comandos:
write (Termo) escreve na tela o valor de Termo se ele for uma varivel ou uma mensagem write($Hoje quinta-feira$). write(Acabou a festa). write(X). read (Termo) nl var(X) atom(X) atomic(X) number(X) l um valor do teclado e coloca em Termo read(X). passa para a prxima linha na tela write(X), nl, write(Y), nl. verifica se X uma varivel no instanciada verifica se X um tomo verifica se X um tipo de dado atmico verifica se X um nmero

entre aspas simples ou entre $

6. Exerccios de Prolog
________________________________________________________________________________________________ Pgina 5 de 18 Inteligncia Artificial Simone Domingues Prado Apostila 01

1.

Qual a resposta Prolog para as seguintes consultas? ?- A = b. ?- a = b. ?- A = B. ?- A = 1+2. ?- A = p(a,b). ?- a = p(a,B). ?- p(A,b) = p(a,B). ?- p(a,b) = p(b,B). ?- p(a,b) = q(a,b). ?- p(x,A,y) = p(x,B). ?- p(x,A,y) = p(x,f(b),y).

2. Para o seguinte programa, quais sero as respostas Prolog para as perguntas abaixo? p(a,c). p(a,b). p(d,a). p(d,b). a) ?-p(a,b). b) ?-p(a,d). c) ?-p(a,X). d) ?-p(X,b). e) ?-p(X,Y). f) ?-p(X,b),p(d,X). g) ?-p(X,Y),p(Z,X). h) ?-p(X,Y),p(Z,Y). 3. Considere o programa p(a,b). p(a,d). p(a,f). p(d,X). Quais seriam as respostas para as seguintes consultas ? a) ?-p(a,X). b) ?-p(a,g). c) ?-p(d,a). d) ?-p(d,b). e) ?-p(d,c). f) ?-p(d,A). g) ?-p(a,X),p(X,Y). h) ?-p(e,b). 4. Considere o seguinte programa: p(a). p(b). p(d). q(a). q(c). q(d).
________________________________________________________________________________________________ Pgina 6 de 18 Inteligncia Artificial Simone Domingues Prado Apostila 01

r(x):-p(x),q(x). s(X):-q(X). s(X):-p(X). O que o Prolog responde para as seguintes consultas: a) ?-r(a). b) ?-r(b). c) ?-r(X). d) ?-s(a). e) ?-s(b). f) ?-s(X). O que voc pode observar sobre a ordem das respostas Prolog para a consulta final ? 5. Considere a seguinte base de dados: a(1,1). b(1,2). a(2,1). b(1,3). a(3,2). b(2,3). a(4,4). b(3,2). b(4,4). sem usar o computador responda: quais so (e em que ordem) as respostas obtidas para a pergunta: ?- a(X,Y),b(X,Y). idem para a pergunta: ?- a(X,Y), b(X,Y), a(Y,Y). 6. Considere a interrogao Prolog: ?- r(X,Y), s(Y,Z), not(r(Y,X)), not(s(Y,Y)). com a seguinte base de dados: r(a,b). s(b,a). r(a,c). s(b,d). r(b,a). s(c,a). r(a,d). s(c,c). s(d,a). sem usar o computador, responda: qual a primeira resposta? quantas vezes Prolog retrocede do terceiro para o segundo predicado antes de obter a primeira resposta? 7. Considere a pergunta: ?-u(X,Y),u(Y,Z),not(u(X,Z)). com a seguinte base de dados: u(a,b). u(b,b). u(c,d). u(c,a). u(d,a). u(d,c). sem usar o computador, responda: quantas vezes Prolog retrocede at o primeiro predicado - u(X,Y) para encontrar a primeira resposta? quantas vezes Prolog retrocede at o segundo predicado - u(Y,Z) para encontrar a primeira resposta?
________________________________________________________________________________________________ Pgina 7 de 18 Inteligncia Artificial Simone Domingues Prado Apostila 01

quantas vezes Prolog retrocede at o primeiro predicado - u(X,Y) para encontrar a segunda resposta? 8. Considere o programa descrito abaixo:
fatorial(0,1). fatorial(N,F):fatorial(N1,F1), F is N*F1,!. N1 is N-1,

8.1. Qual a funo do operador is? 8.2. Qual a funo do operador ! ? 9. Considere o programa descrito abaixo:
p(X):- r(X). q(X):- s(X). q(X):- t(X). r(0). r(1). s(2). s(3). t(4). t(5).

Pede-se: 9.1.Execute e analise o programa para o objetivo p(X). Quantas e quais so as instncias encontradas? 9.2. Execute e analise o programa para o objetivo p(X):- !, q(X). (altere no programa e chame p(X)) Quantas e quais so as instncias encontradas? Explique. 9.3. Execute e analise o programa para o objetivo p(X):- q(X),!. (altere no programa e chame p(X)) Quantas e quais so as instncias encontradas? Explique. 10. Dado o programa em Prolog,
p(1). p(2):- !. p(3).

Encontre as respostas para as questes abaixo e as justifique: a) ?- p(X). b) ?- p(X), p(Y). c) ?- p(X), !, p(Y). 11. Dado o programa em Prolog com os predicados:
gosta(gato,rato). deseja(gato,queijo).

Quais os resultados das seguintes consultas: a) ?- not deseja(X,Y), gosta(gato,X). b) ?- gosta(gato,X), not deseja(X,Y). Justifique a resposta.

________________________________________________________________________________________________ Pgina 8 de 18 Inteligncia Artificial Simone Domingues Prado Apostila 01

12. Dado um banco de dados com informaes geogrficas definindo os seguintes fatos: oceano(X) pais(X) continente(X) fronteira(X,Y), onde X e Y podem ser pases ou oceanos. loc(X,Y), onde X est localizado em Y (X um pas e Y um continente ) Responda as perguntas: a) Quais pases europeus fazem fronteira com oceanos? b) Ache todos os pares de pases A e B onde: A e B tem a mesma fronteira; A faz fronteira com um oceano e B com outro; A e B no fazem fronteira com o mesmo oceano. 13. Criar um programa sobre parentesco onde s se sabe a relao de pai, me, homem e mulher. Os parentescos a serem descritos so: filho(a), tio(a), av(), irmo(), primo(a), enteado(a), tio_av, tia_av, meio_irmo(a). 14. Criar um programa que dada a data de nascimento de uma pessoa, o programa deve retornar sua idade (em ano e meses) e seu signo. 15. ndice de Massa Corporal (IMC), definido pelo mdico francs Quetelet em 1964, atualmente considerado como a medida que d uma melhor idia do significado do peso de uma pessoa maior de 18 anos. Peso O IMC definido por: IMC = ( Altura ) 2 e o valor obtido interpretado usando o seguinte critrio: entre 20 e 24.9 normal entre 25 e 29.9 obesidade grau 1 entre 30 e 39.9 obesidade grau 2 acima de 40 obesidade grau 3 Faa um programa que pergunte ao usurio seu peso e altura, calcule o IMC e informe a interpretao do valor obtido. 16. Dadas as distncias do sol aos planetas do Sistema Solar em milhes de milhas como a tabela abaixo, escrever um programa que calcule a distncia entre dois planetas quaisquer, onde a clusula tem a forma: distncia_planetas(Planeta1,Planeta2,Dist):- ............ Planeta Mercrio Vnus Terra Marte Jpiter Saturno Urnio Netuno Plutnio Distncia 36 67 93 141 484 886 1790 2800 4600

17. Escreva sentenas atmicas para cada um dos seguintes vocabulrios e interrogue PROLOG para obter as seguintes informaes: a) Objetos Relaes Eu robot brasileira escreveu
________________________________________________________________________________________________ Pgina 9 de 18 Inteligncia Artificial Simone Domingues Prado Apostila 01

Feliz Ano Velho inglesa nacionalidade Isaak Asimov novela tipo M. Paiva conto ... ... ... quais os autores da mesma nacionalidade que escrevem contos? b) Objetos Relaes Beija-flor alegorias evoluo Portela bateria fantasias .... comisso de frente harmonia <nota> enredo ... quais as escolas de samba que tiraram nota 10 em evoluo e alegorias e em que ano? quais as escolas que obtiveram nota 10 em bateria? 18. Monte uma base de conhecimento em Prolog que fale sobre cargos e chefias. Os cargos so tcnico, engenheiro, analista, supervisor, supervisor-chefe, secretria e diretor. Sabe-se que o engenheiro chefe do tcnico; o supervisor chefe do engenheiro e do analista; o supervisorchefe chefe do supervisor; o diretor chefe do supervisor-chefe e da secretria. Escreva clusulas que indiquem que: quem so os chefes dos tcnicos? Nome e Cargos. quem so e que cargos ocupam as pessoas que so chefiados pelo supervisor-chefe ou pelo supervisor? quem so os supervisores? quais os cargos que o diretor chefia? 19. Escreva um programa para identificar a que sculo pertence um determinado ano. Por exemplo: 1900 <= Ano < 2000 sculo 20 1800 <= Ano < 1900 sculo 19, etc. 20. O cardpio de um restaurante consta de primeiro prato, prato principal, sobremesa e seus respectivos preos. Em Prolog poderamos escrever uma base de conhecimento da seguinte forma: primeiro_prato(salada_palmito,2.0). ... prato_principal(peixe, 4.6). ... sobremesa(salada_frutas, 2.0). ... Escreva o programa: cardpio(PrimPrato,PratoPrinc,Sobr,Min, Max):- .... tal que, dados os valores Min e Max (que representam a menor e a maior quantia de dinheiro que o fregus quer gastar), o programa apresenta os possveis cardpios. A sada deve ser: Primeiro Prato Prato Principal Sobremesa Custo salada palmito peixe salada frutas 8.6 21. Considere uma base de dados que contm informaes sobre diversos modelos de caixas dgua, na seguinte forma:
________________________________________________________________________________________________ Pgina 10 de 18 Inteligncia Artificial Simone Domingues Prado Apostila 01

caixa(Modelo, Altura, Largura, Profundidade). Desenvolva os seguintes programas: volume(Modelo, Volume):- .... medida(Modelo, Tipo, Medida):- .... que dependendo do valor de Tipo retorna a medida correspondente segundo a tabela abaixo: Tipo Medida a Altura l Largura p Profundidade Interrogue Prolog para obter as seguintes informaes: quais e quantos os recipientes tem capacidade maior que 50 m3? quais e quantos recipientes possuem a mesma altura e largura? quais recipientes tem volume entre 50 e 70 m3 ? 22. Construa uma base de dados que contm a populao e a rea estimada dos estados do Brasil (pop_area(<estado>,<populao>,<rea>). Escreva programas para determinar a densidade da populao dos estados e do pas. Quais as interrogaes Prolog para as seguintes perguntas: qual o menor estado do Brasil, e o maior? qual o estado mais e menos densamente povoado? 23. Faa um programa para verificar se uma palavra (fornecida pelo usurio) palndrome. 24. Faa um programa para gerar nomes hbridos. Exemplo: hibrido (minhoca, cavalo, L) => L = minhocavalo 25. Veja as regras de produo na tabela a seguir. Transforme-as em predicados do Prolog e interrogue: a) Qual animal tem o corpo coberto por plos, sua alimentao basicamente carne, sua cor amarelado e padro de pele listras pretas. b) Qual animal tem seu corpo coberto por plos, a seu p na forma de casco, seu padro de pele listras pretas e sua cor predominante branco. c) Qual animal tem o corpo coberto por plos, sua alimentao basicamente carne, sua cor amarelado e padro de pele composta por manchas.
Regra 01 Se cobertura_corpo = plo Ento classe = mamfero Regra 02 Se comida_filhote = leite Ento classe = mamfero Regra 03 Se cobertura_corpo = pena Ento classe = pssaro Regra 04 Se forma_locomover = voando e Modo_nascer = ovos Ento classe = pssaro Regra 05 Se classe = mamfero e comida = carne Enta conjunto = carnvoro Regra 09 Regra 10 Regra 11 Se conjunto = carnvoro e cor = amarelado e padro_pele = manchas Ento animal = chit Se conjunto = carnvoro e cor = amarelado e padro_pele = listras_pretas Ento animal = tigre Se conjunto = herbvoro e tamanho_perna = longo e tamanho_pescoo = longo e cor = amarelado e padro_pele = manchas_escuras Ento animal = girafa Se conjunto = herbvoro e cor = branco e padro_pele = listras_pretas Ento animal = zebra Se classe = pssaro e forma_locomover = andando e tamnaho_perna = longo e tamanho_pescoo = longo e cor = branco_preto Ento animal =avestruz Se classe = pssaro e forma_locomover = nadando

Regra 12 Regra 13

Regra 06 Se classe = mamfero e tipo_dente =


Inteligncia Artificial Simone Domingues Prado Apostila 01

Regra 14

________________________________________________________________________________________________ Pgina 11 de 18

pontiagudo e Tipo_p = garra e direo_olhos = para_frente Ento conjunto = carnvoro Regra 07 Se classe = mamfero e tipo_p = casco Ento conjunto = herbvoro Regra 08 Se classe = mamfero e a comida = capim ou folhas Ento conjunto = herbvoro

e Regra 15 cor = branco_preto Ento animal = pinguim Se classe = pssaro e tipo_vo = bom Ento animal = albatroz

26. Veja as regras de produo na tabela a seguir. Transforme-as em predicados do Prolog e interrogue a) Descubra o que Amanda e o Sr Luiz vo jantar (prato e bebida), sabendo que o Sr Luis chefe de Amanda e ela o convidou para jantar numa Sexta-feira. b) Sabendo que no Sbado a Lcia convidou o Sr Augusto, seu vizinho, para jantar, descubra o que iro comer e beber.
Regra 01 Se idade-convidado < 21 Ento indicao-lcool = no Regra 02 Se idade-convidado >= 21 Ento indicao-lcool = sim Regra 03 Se indicao-lcool = sim e encontro = formal Ento bebida = vinho Regra 04 Se indicao-lcool = sim e convidado = chefe Ento bebida = vinho Regra 05 Se indicao-lcool = sim e convidado = vizinho Ento bebida = cerveja Regra 06 Se bebida = vinho e jantar = peixe Ento tipo-vinho = branco Regra 07 Regra 08 Regra 09 Regra 10 Regra 11 Regra 12 Se bebida = vinho e jantar = carnevermelha Ento tipo-vinho = tinto Se convidado = chefe e dia = Sexta-feira Ento jantar = peixe Se convidado = chefe e dia <> Sexta-feira Ento jantar = carne-vermelha Se idade-convidado < 21 Ento jantar = pizza Se idade-convidado >= 21 Ento jantar = peixe Se indicao-lcool = no Ento bebida = soda

27. Traduza as seguintes sentenas para Prolog: Tweety um pssaro. Goldie um peixe. Squiggly uma minhoca. Pssaros gostam de minhoca. Gatos gostam de peixe. Gatos gostam de pssaros. Amigos se gostam. Meu gato meu amigo. Meu gato come tudo o que ele gosta. a) use Prolog para determinar o que come meu gato. b) a resposta razovel? Se no for, verifique se o problema est na especificao original ou na sua traduo para o Prolog. Corrija e execute novamente. 28. Reescreva o programa referente a escolas de samba com a seguinte estrutura de informao: Escola(<nome da escola>, <ano>, <lista das notas dos dez quisitos>) Onde a primeira nota corresponde a alegorias, a Segunda bateria e assim por diante, dado por: Pos_nota(alegorais,1). Pos_nota(bateria,2). .... a) desenvolva o programa: nota_media(<nome da escola>, <ano>, <media>) :que calcula a nota mdia de cada escola. b) usando o programa para acessar o n-simo elemento de uma lista escreva o predicado: nota_quesito(<nome da escola>, <ano>,<quesito>,<nota do quesito>) :para encontrar a nota de um dado quesito. c) encontre tambm a nota mdia de cada quesito: mdia_quesito (<quesito>,<nota media>) :d) interrogue o programa par responder as seguintes perguntas: Quantas e quais escolas tiveram nota mxima em um dado quesito? Quais as escolas que possuem nota menor que a nota mdia geral?
________________________________________________________________________________________________ Pgina 12 de 18 Inteligncia Artificial Simone Domingues Prado Apostila 01

Quais as escolas que possuem a nota do quesito menor que a nota mdia do quesito?

7. Listas
A lista uma seqncia ordenada de elementos que pode ter qualquer comprimento. dita ordenada porque a ordem dos elementos importante, j que podemos fazer referncia ao primeiro, ao i-simo e ao ltimo elemento. Os elementos de uma lista pode ser uma varivel, uma constante, ou qualquer estrutura do Prolog. Eles so separados por vrgulas. As listas em Prolog podem identificadas como: [X|Y] [ Cabea | Cauda ] [ Topo | Cauda ] [ Primeiro | Resto ] onde a Cauda pode ser uma lista vazia, ou seja sem elementos. Exemplos: Lista [casa] [3, 4, 5] [ o, gato, morreu, ontem ] Cabea [casa] [3] [o] Cauda [] [4, 5] [gato, morreu,ontem]

8. Unificao de Listas
A unificao de uma lista [X | Y] com X e Y variveis, com uma lista do tipo [ a1, a2, a3, ..., an ] resulta em: { X/a1, Y/[ a2, a3, ..., an ]} { X/a1, Y/[]} se n > 1 se n = 1

Exemplos: Lista 1 [mesa] [a,b,c,d] Lista 2 [X|Y] [ X, Y | Z ] Unificao X/mesa Y/ [] X/a Y/b

________________________________________________________________________________________________ Pgina 13 de 18 Inteligncia Artificial Simone Domingues Prado Apostila 01

[ano, bissexto]

[ X, Y, Z] [X, Y | Z]

Z/[c,d] no unifica X/ano Y/bissexto Z/[]

Quais as respostas Prolog para as seguintes consultas ? a) ?-[X]=[a]. b) ?-X=[ ]. c) ?-[X]=[ ]. d) ?-X=[a]. e) ?-[X,Y]=[a]. f) ?-[X,Y]=[a,b]. g) ?-[X,Y]=[a,b,c]. h) ?-[X,Y,Z]=[a,b,c]. i) ?-[X,Y,X]=[a,b,c]. j) ?-[X,Y,X]=[a,b,a]. k) ?-[X|Y]=[a]. l) ?-[X|Y]=[ ]. m) ?-[X|Y]=[a,b,c]. n) ?-[X,Y|Z]=[a,b,c]. o) ?-[X,Y|Z]=[a,b]. p) ?-[X,Y|Z]=[a]. q) ?-[X,Y|Z]=[a,b,c,d]. r) ?-[X,Y|Z]=[a,b,a]. s) ?-[X,Y|Z]=[[a],b,a].

9. Problemas resolvidos de listas:


1. Elementos de uma lista: pertence ( Elemento, Lista ) - o Elemento pertence a Lista se ele a cabea da Lista ou - o Elemento pertence cauda da Lista. pertence( Elemento, [Elemento | _]). pertence( Elemento, [ _ | Cauda ]) :- pertence ( Elemento, Cauda ).

2. ltimo elemento de uma lista: ultimo ( Lista, Elemento) - se a Lista tem s um elemento, este o ltimo Elemento. - o ltimo elemento de uma Lista com mais de um elemento o ltimo elemento da Cauda da Lista. ultimo ( [Elemento], Elemento ).
________________________________________________________________________________________________ Pgina 14 de 18 Inteligncia Artificial Simone Domingues Prado Apostila 01

ultimo ( [ _ | Cauda], Elemento ):- ultimo (Cauda, Elemento). 3. Soma dos elementos de uma lista numrica: soma ( Lista, S ) - se a Lista vazia, a soma dos elementos zero. - se a Lista [Cabea | Cauda], a soma dos elementos a soma dos elementos da Cauda mais a Cabea. soma ([ ], 0). soma ([Cabea | Cauda], S):- soma(Cauda, S1), S is S1 + Cabea. 4. Elementos consecutivos em uma lista segundo elementos da Lista. - ou se so consecutivos na cauda da Lista. consecutivos(Elemento1, Elemento2, [ Elemento1, Elemento2 | Cauda]). consecutivos(Elemento1, Elemento2, [ _ | Cauda]):consecutivos( Elemento1, Elemento2, Cauda). consecutivos( Elemento1, Elemento2, Lista)

- dois elementos Elemento1 e Elemento2 so consecutivos se eles so o primeiro e o

10. Exerccios de listas:


1. N-simo elemento de uma lista: n_esimo( N, Elemento, Lista ). 2. Nmero de elementos de uma lista: no_elementos ( Lista, N ). 3. Retirar a primeira ocorrncia de um elemento de uma lista: tire_elemento ( Elemento, Lista, Lista_nova ). 4. Retirar todas as ocorrncias de um elemento de uma lista: retirar_ocor ( Elemento, Lista, Lista_nova ). 5. Retirar elementos repetidos de uma lista: retire_repet ( Lista, Lista_nova ). 6. Concatenar duas listas quaisquer: concatenar ( Lista1, Lista2, Lista_concat ). 7. Encontrar o maior elemento de uma lista numrica: maior ( Lista, Elemento ). 8. Encontrar o menor elemento de uma lista numrica: menor ( Lista, Elemento ). 9. Pegar elementos de uma lista dada a lista de suas posies: pegar (Lista_posies, Lista, Lista_resultante) 10. Inserir elemento na primeira posio de uma lista: inserir_cabea ( Elemento, Lista. Lista_resultante ).
________________________________________________________________________________________________ Pgina 15 de 18 Inteligncia Artificial Simone Domingues Prado Apostila 01

11. Inserir elemento numa posio N da lista: inserir_N (Elemento, N, Lista, Lista_resultante) 12. Inverter uma lista: inverter (Lista, Lista_resultante) 13. Substituir um elemento de uma lista por um outro elemento: substitui (X, Y, Lista, Lista_resultante) 14. Duplicar elementos de uma lista: duplicar_todos (Lista, Lista_resultante) 15. Duplicar um elemento de uma lista: duplicar_um (Elemento, Lista, Lista_resultante) 16. Verificar se a interseco entre dois conjuntos no vazia: nao_vazia ( Lista1, Lista2 ). 17. Fazer a unio de dois conjuntos: uniao ( Lista1, Lista2, Lista_uniao ). 18. Verificar se dois conjuntos so disjuntos: disjuntos ( Lista1, Lista2 ). 19. Verificar se dois conjuntos so iguais: iguais ( Lista1, Lista2 ). 20. Fazer a diferena simtrica entre dois conjuntos: dif_simtrica(Lista1, Lista2, Lista_resultante) 21. Resolva o predicado abaixo: separar(Elem, Lista, Lista_iguais, Lista_diferentes,Nro_LI,Nro_LD) que separa uma lista numrica em duas listas e conta quantos elementos tem em cada uma delas. A Lista_iguais conter os elementos iguais Elem e a Lista_diferentes conter os elementos diferentes de Elem. Nro_LI tem o nmero de elementos de Lista_iguais e Nro_LD, o nmero de elementos de Lista_diferentes. 22. Fazer os predicados imprima_estoque(Lista_estante,Lista_litros,Lista_estoque) e atualize(N,Nro_estante,Lista_estante,Lista_nova), onde:
N o nmero de barris que chegaram, Nro_estante o nmero da estante onde est o barril, Lista_estante uma lista que indica o nmero da estante na ordem em que aparece nos predicados barril( ) Lista_litros uma lista que indica o nmero da litros do barril na ordem em que aparece nos predicados barril() Lista_estoque uma lista que indica a qtidade de barris na ordem em que aparece nos predicados barril( ) Lista_nova uma lista que indica a qtidade de barris na ordem em que aparece nos predicados barril( )

Exemplo do programa
Barril(1,100,10). barril(2,50,25). barril(3,25,20). barril(4,10,15). progr_cervejaria:write('Qtidade de litros no barril? '),read(Litros), write('Quantas barris desse chegou? '),read(N), barril(Nro_estante,Litros,_), findall(Nro,barril(Nro,_,_),Lista_estante), findall(Qt,barril(_,Qt,_),Lista_litros), findall(Estoque,barril(_,_,Estoque),Lista_estoque), write('O estoque est com...'),nl, imprima_estoque(Lista_estante,Lista_litros,Lista_estoque), atualize(N,Nro_estante,Lista_estoque,Lista_nova),!, write('O estoque depois de atualizado est com...'),nl, imprima_estoque(Lista_estante,Lista_litros,Lista_nova).

Exemplo da execuo
?- progr_cervejaria. Qtidade de litros no barril? 10. Quantas barris desse chegou? 5. O estoque est com... barril(1,100,10). barril(2,50,25). barril(3,25,20). barril(4,10,15). O estoque depois de atualizado est com... barril(1,100,10). barril(2,50,25). barril(3,25,20). barril(4,10,20). Yes

23. Fazer os predicados escolher_caixa (Cor, Nro_caixa) e pegue(N,Nro_caixa,Lista,Lista1), onde:


Cor a cor pedida pelo usurio, N o nmero de bolas a serem selecionadas,

________________________________________________________________________________________________ Pgina 16 de 18 Inteligncia Artificial Simone Domingues Prado Apostila 01

Nro_Caixa o nmero da caixa onde est a bola, Lista uma lista que indica o nmero de bolas em cada caixa Lista1 uma lista que indica o nmero de bolas em cada caixa aps o uso do predicado pegar.

Exemplo do programa
Caixa(preta,1,3). caixa(branca,2,5). caixa(vermelha,3,4). caixa(amarela,4,6). caixa(verde,5,2). progr_bolas:write('qual a cor da bola? '),read(Cor), write('quantas bolas quer pegar? '),read(N), Escolher_caixa(Cor,Nro_caixa), Pegar_bolas(N,Nro_caixa). Pegar_bolas(N,Nro_caixa):Findall(Bolas,caixa(_,_,Bolas),Lista), Pegue(N,Nro_caixa,Lista,Lista1),!, Write('Pegou as '),write(N),write(' bolas'), Write(' na caixa de bolas '),caixa(Cor,Nro_caixa,_), Write(Cor),write('s'). pegar_bolas(N,Nro_caixa):write('Nao tem bolas suficientes na caixa de bolas '), caixa(Cor,Nro_caixa,_), write(Cor) ,write('s')

Exemplo da execuo
?- progr_bolas. qual a cor da bola? verde. quantas bolas quer pegar? 1. Pegou as 1 bolas na caixa de bolas verdes Yes ?- progr_bolas. qual a cor da bola? amarela. quantas bolas quer pegar? 10. Nao tem bolas suficientes na caixa de bolas amarelas Yes

24. Fazer o predicado armazenar( ) que possui 5 parmetros:

VMax = capacidade mxima permitida, C1,C2,C3 = modelos das caixas, ou valor = sem caixa (se no existe essa caixa ) O = ocupao das caixas.

Sabe-se que podemos armazenar 3, 2 ou 1 caixa da seguinte forma: Se for para colocar 3 caixas tem-se que ocupar no mnimo 90% do VMax. Se for para colocar 2 caixas tem-se que ocupar no mnimo 70% do VMax. Se for para colocar 1 caixa tem-se que ocupar no mnimo 50% do VMax.

Exemplo do programa: caixa(c1,10,5,2). caixa(c2,6,2,5). caixa(c3,6,3,3). caixa(c4,5,5,3). armaz(L):- write('Valor maximo = '), read(VMax), findall([O,C1,C2,C3], armazenar(VMax,C1,C2,C3,O), L). Exemplo da execuo ?- armaz(L). Valor maximo = 250. L = [[235, c1, c2, c4], [229, c1, c3, c4], [235, c1, c4, c2], [229, c1, c4, c3], [235, c2, c1, c4], [235, c2, c4, c1], [229, c3, c1, c4], [229, c3, c4, c1], [235, c4, c1, c2], [229, c4, c1, c3], [235, c4, c2, c1], [229, c4, c3, c1], [175, c1, c4, sem_caixa], [175, c4, c1, sem_caixa]] Yes

25. Fazer os predicados necessrios para que o programa abaixo funcione:


progr(Lista_nomes, Lista_p1, Lista_p2):% calcula a mdia aritmtica entre duas listas e armazena numa terceira media(Lista_p1,Lista_p2,Lista_media), % Encontra a maior mdia de Lista_media e devolve o nome e a maior mdia maior_media(Lista_nomes, Lista_media, Nome, Nota), write('O aluno que teve maior media foi: '), write(Nome), write(' com media '), write(Nota), nl, % Imprime o nome de Lista_nomes e sua respectiva nota mdia de Lista_media imprima_listas(Lista_nomes,Lista_media). Exemplo de execuo:
________________________________________________________________________________________________ Pgina 17 de 18 Inteligncia Artificial Simone Domingues Prado Apostila 01

?- progr([jose,maria,joao,davi],[6,5,7,9],[10,2,3,4]). O aluno que teve maior media foi: jose com media 8 jose com media 8 maria com media 3.5 joao com media 5 davi com media 6.5 Yes.

26. Fazer os predicados necessrios para que o programa abaixo funcione:


progr(Lista_nomes, Lista_p1, Lista_p2, Peso):/* calcula a mdia aritmtica entre duas listas (Lista_p1 e Lista_p2) multiplicado pelo peso e armazena numa terceira (Lista_media) */ media(Lista_p1, Lista_p2, Peso, Lista_media), % Encontra a menor mdia de Lista_media e devolve o nome e a menor mdia menor_media(Lista_nomes, Lista_media, Nome, Nota), write('O aluno que teve menor media foi: '), imprima_valores(Nome, Nota), nl, % Imprime o nome de Lista_nomes e sua respectiva nota mdia de Lista_media imprima_listas(Lista_nomes, Lista_media). Exemplo de execuo: ?- progr([joao,jose,maria],[4,3,5],[2,1,2],0.6). O aluno que teve menor media foi: jose com nota 1.2 joao com nota 1.8 jose com nota 1.2 maria com nota 2.1 Yes

________________________________________________________________________________________________ Pgina 18 de 18 Inteligncia Artificial Simone Domingues Prado Apostila 01

Você também pode gostar