








































































Estude fácil! Tem muito documento disponível na Docsity
Ganhe pontos ajudando outros esrudantes ou compre um plano Premium
Prepare-se para as provas
Estude fácil! Tem muito documento disponível na Docsity
Prepare-se para as provas com trabalhos de outros alunos como você, aqui na Docsity
Os melhores documentos à venda: Trabalhos de alunos formados
Prepare-se com as videoaulas e exercícios resolvidos criados a partir da grade da sua Universidade
Responda perguntas de provas passadas e avalie sua preparação.
Ganhe pontos para baixar
Ganhe pontos ajudando outros esrudantes ou compre um plano Premium
Comunidade
Peça ajuda à comunidade e tire suas dúvidas relacionadas ao estudo
Descubra as melhores universidades em seu país de acordo com os usuários da Docsity
Guias grátis
Baixe gratuitamente nossos guias de estudo, métodos para diminuir a ansiedade, dicas de TCC preparadas pelos professores da Docsity
Prolog para todas as ocasiões: 1001 exercícios resolvidos de programação em lógica usando SWI-Prolog
Tipologia: Exercícios
1 / 80
Esta página não é visível na pré-visualização
Não perca as partes importantes!
© Versão preliminar desenvolvida em 9 de dezembro de 2010
1.1 Árvore genealógica
Ex. 1 — (Sexo dos personagens da série Os Simpsons ) Escrever uma banco de dados sobre o sexo de cada personagem integrante da família Simpson e também sobre a relação de progenitor.
Solução:
% Fatos.
homem( abraham). homem( clancy). homem( herbert). homem( homer). homem( bart).
mulher( mona). mulher( jacqueline). mulher( abbie). mulher( marge). mulher( patty). mulher( selma). mulher( lisa). mulher( maggie). mulher( ling).
progenitor( abraham, homer). progenitor( abraham, abbie). progenitor( abraham, herbert). progenitor( mona, homer).
progenitor( clancy, marge). progenitor( clancy, patty ). progenitor( clancy, selma). progenitor( jacqueline, marge). progenitor( jacqueline, patty ). progenitor( jacqueline, selma).
3
Árvore genealógica 4
progenitor( homer, bart). progenitor( homer, lisa). progenitor( homer, maggie). progenitor( marge, bart). progenitor( marge, lisa). progenitor( marge, maggie).
progenitor( selma, ling ).
Uso: SWI ?- mulher(Quem). % Quem são as mulheres da família? Quem = mona ; Quem = jacqueline ; Quem = abbie ; Quem = marge ; Quem = patty ; Quem = selma ; Quem = lisa ; Quem = maggie ; Quem = ling.
?- progenitor(Quem,selma). % Quem são os progenitores de Selma? Quem = clancy ; Quem = jacqueline ; false.
PComentário O banco de dados desenvolvido aqui será reutilizado nos exercícios seguin- tes.
Ex. 2 — (Relações de parentesco: pai, mãe, filho, filha e irmãos) Como de- terminar quem é pai, mãe, filho, filha ou irmãos em uma família?
Solução:
pai( P, F):− homem( P), progenitor( P, F). mae( M, F):− mulher( M), progenitor( M, F).
filho ( F, P):− homem( F), progenitor( P, F). filha ( F, P):− mulher( F), progenitor( P, F).
Árvore genealógica 6
homem( T), irmaos( T, P), progenitor( P, S).
tia ( T, S) :− mulher( T), irmaos( T, P), progenitor( P, S).
primo( A, B) :− homem( A), progenitor( X, A), irmaos( X, Y), progenitor( Y, B).
prima( A, B) :− mulher( A), progenitor( X, A), irmaos( X, Y), progenitor( Y, B).
avo( A, B) :− pai( A, X), progenitor( X, B). avoh( A, B) :− mae( A, X), progenitor( X, B).
Uso: SWI ?- tio(Tio,Quem). % Quem é tio de quem? Tio = herbert, Quem = bart ; Tio = herbert, Quem = lisa ; Tio = herbert, Quem = maggie ; false.
?- tia(patty,Quem). % De quem Patty é tia? Quem = bart ; Quem = lisa ; Quem = maggie ; Quem = ling ; Quem = bart ;
Árvore genealógica 7
Quem = lisa ; Quem = maggie ; Quem = ling ; false.
?- primo(bart,Quem). % De quem Bart é primo? Quem = ling ; Quem = ling ; false.
?- prima(A,B). % Quem é primo de quem? A = lisa, B = ling ; A = lisa, B = ling ; A = maggie, B = ling ; A = maggie, B = ling ; A = ling, B = bart ; A = ling, B = lisa ; A = ling, B = maggie ; A = ling, B = bart ; A = ling, B = lisa ; A = ling, B = maggie ; false.
?- avo(Avo,Quem). % Quem é avô de quem? Avo = abraham, Quem = bart ; Avo = abraham, Quem = lisa ; Avo = abraham, Quem = maggie ; Avo = clancy, Quem = bart ; Avo = clancy, Quem = lisa ; Avo = clancy,
Desafios lógicos 9
tocaAntes( Y, Z, S), nome( Y, john), toca( Y, sax), pais( Z, australia ), tocaAntes( Y1, Z1, S), nome( Y1, mark), pais( Y1, eua), toca( Z1, violino ), membros( U, S), pais( U, japao), membros( V, S), nome( V, sam).
banda_solista( banda( solista( N1, P1, I1), solista ( N2, P2, I2), solista ( N3, P3, I3 ))).
nome( solista( N,,), N).
pais( solista (, P, ), P).
toca( solista (,, I ), I ).
primeiro( X, banda( X,,)).
tocaAntes( X, Y, banda( X, Y, Z)). tocaAntes( X, Z, banda( X, Y, Z)). tocaAntes( Y, Z, banda( X, Y, Z)).
membros( X, banda( X, Y, Z)). membros( Y, banda( X, Y, Z)). membros( Z, banda( X, Y, Z)).
Uso: SWI ?- solucao_musicos(Sol). Sol = banda(solista(mark, eua, piano), solista(john, japao, sax), solista(sam, australia, violino)).
PComentário Podemos reescrever o problema dado de uma forma mais lógica: S é uma solução para o problema dos músicos se S é uma banda com três solistas,
Desafios lógicos 10
na qual o primeiro membro X de S toca piano, e existem dois membros ordenados Y, Z de S tal que o nome de Y é John, Y toca saxofone e Z vem da Austrália, e existem dois membros ordenados Y1, Z1 de S tal que o nome de Y1 é Mark, Y1 vem dos Estados Unidos, e Z1 toca violino, e existe um membro U de S que vem do Japão, e existe um membro V de S cujo nome é Sam.
Agora precisamos criar uma forma para a solução. Cada solista possui um nome, um país de origem e um instrumento. Podemos respresentá-lo usando o termo solista ( N, P, I), no qual:
N: é o nome do solista;
P: é o país de origem; e
I: é o instrumento que o solista toca.
Com este termo em mãos, a solução para o problema será representada pelo termo banda( solista( N1, P1, I1), solista ( N2, P2, I2), solista ( N3, P3, I3))
Ex. 5 — (Problema do jantar) Num fim de semana chuvoso (sexta, sá- bado e domingo), três mulheres tiveram a mesma ideia: fazer uma sopa para o jantar da família. As sopas foram de agrião, cebola e ervilha. Uma das mulheres se chama Nádia. Conforme as informações a seguir, descubra seus nomes, em que dia da semana cada uma fez sopa e que tipo de sopa preparou para o jantar:
1.Ana Lúcia fez sopa de ervilha. 2.A sopa de cebola foi preparada para o jantar de domingo. 3.Dalva resolveu fazer sopa na sexta-feira.
Solução:
solucao_jantar( S):− solucao( S), membros( X, S), nome( X, ana), sopa( X, ervilha), membros( Y, S), dia( Y, domingo), sopa( Y, cebola),
Desafios lógicos 12
membros( X, S), nome( X, nelson), membros( Y, S), local( Y, floresta ), membros( Z, S), entidade( Z, dragao), membros( T, S), nome( T, roberto), entidade( T, unicornio), membros( U, S), entidade( U, bruxo), local( U, pantano), membros( V, S), nome( V, juliano), local( V, castelo).
garotos( aventura( garoto( N1, E1, L1), garoto( N2, E2, L2), garoto( N3, E3, L3))).
membros( X, aventura( X,,)). membros( X, aventura(, X,)). membros( X, aventura(,, X)).
nome( garoto( N,,), N). entidade( garoto(, E,), E). local ( garoto(,, L), L).
Uso: SWI solucao_aventura(Sol). Sol = aventura(garoto(nelson, bruxo, pantano), garoto(roberto, unicornio, floresta), garoto(juliano, dragao, castelo)).
** Ex. 7 — (Barcos pesqueiros) Assim que escurece, cinco barcos pesquei- ros saem do porto em busca da pescaria. Com as informações que seguem, descubra o nome e o número de registro de cada barco, o nome de seus mestres arrais e o que foram pescar.
1.O E34 pescará sardinhas. 2.O “Marina” é o E18, enquanto o “Gaivota” navega sob o comando do mestre Benedito. 3.A tripulação do “Jangada” está pegando siris. O “Rei dos Mares” não está a procura de badejos e seu mestre não é Wanderson. 4.Nem a tripulação do “Netuno” nem o mestre Bernardo e sua tripula- ção pegarão lagostas. 5.O barco do mestre Hélio, E60, não é o “Jangada” nem o “Rei dos Ma- res”.
Desafios lógicos 13
6.O mestre Fernando espera pescar muitos dourados em um barco cujo nome começa com “M”. 7.O registro do “Gaivota” não é E56. 8.Dois registros são E42 e E60.
Solução:
resolve( S):− solucao( S), membros( A, S), registro( A, e34), pesca( A, sardinhas), membros( B, S), nome( B, marina), registro( B, e18), membros( C, S), nome( C, gaivota), mestre( C, benedito), membros( D, S), nome( D, jangada), pesca( D, siris), membros( E, S), nome( E, rei_dos_mares), membros( F, S), nome( F, netuno), membros( G, S), mestre( G, bernardo), membros( H, S), mestre( H, helio), registro( H, e60), membros( I, S), mestre( I, fernando), pesca( I , dourados), nome( I, NI), comeca_com( NI, m), membros( J, S), nome( J, gaivota), membros( K, S), registro( K, e42), membros( L, S), registro( L, e60), membros( M, S), mestre( M, wanderson), membros( N, S), pesca( N, lagostas), membros( O, S), pesca( O, badejos), membros( P, S), registro( P, e56), pesca( E, PE), PE == badejos, mestre( E, ME), ME == wanderson, pesca( F, PF), PF == lagostas, pesca( G, PG), PG == lagostas, nome( H, NH), NH == jangada, NH == rei_dos_mares, registro ( J, RJ), J == e56.
solucao( pescaria( barco( N1, R1, M1, P1), barco( N2, R2, M2, P2), barco( N3, R3, M3, P3), barco( N4, R4, M4, P4), barco( N5, R5, M5, P5))).
Desafios lógicos 15
7.Um dos Tê Vês se chama Gegê.
Solução:
resolve( S):− solucao( S), membros( A, S), nome( A, luna), cor( A, amarelo), membros( B, S), nome( B, didi), cor( B, CB), membros( C, S), cor( C, verde), roupa( C, RC), funcao( C, FC), membros( D, S), funcao( D, cozinheiro), roupa( D, avental), membros( E, S), roupa( E, chapeu), cor( E, CE), funcao( E, FE), membros( F, S), cor( F, lilas ), funcao( F, lavador), roupa( F, RF), membros( G, S), nome( G, dada), funcao( G, faxineiro), roupa( G, RG), membros( H, S), nome( H, bica), roupa( H, sueter), membros( I, S), cor( I, vermelho), roupa( I, casaco), membros( J, S), nome( J, gege), membros( K, S), cor( K, rosa), membros( L, S), funcao( L, jardineiro), membros( M, S), funcao( M, motorista), membros( N, S), roupa( N, calcao), CB == verde, CB == rosa, RC == avental, FC == jardineiro, CE == rosa, FE == motorista, FE == lavador, RF == calcao, RG == chapeu.
solucao( criaturas( tv( N1, C1, R1, F1), tv( N2, C2, R2, F2), tv( N3, C3, R3, F3), tv( N4, C4, R4, F4), tv( N5, C5, R5, F5))).
nome( tv( N,,,_), N).
Desafios lógicos 16
cor( tv(, C,,_ ), C). roupa( tv(,, R,), R). funcao( tv(,,, F), F).
membros( X, criaturas( X,,,,)). membros( X, criaturas(, X,,,)). membros( X, criaturas(,, X,,)). membros( X, criaturas(,,, X,)). membros( X, criaturas(,,,, X)).
Uso: SWI ?- resolve(S). S = criaturas(tv(luna, amarelo, chapeu, jardineiro), tv(didi, vermelho, casaco, motorista), tv(dada, verde, calcao, faxineiro), tv(gege, rosa, avental, cozinheiro), tv(bica, lilas, sueter, lavador)).
PComentário Note que todos os predicados com negação foram colocados no final do programa, depois que todas as variáveis já foram instanciadas.
*** Ex. 9 — (Fazendeiros e suas fazendas) Cinco fazendeiros de uma re- gião resolveram trocar os rebanhos tradicionais por criações exóticas. Com as dicas que seguem, diga o nome de cada fazendeiro, quando ele comprou a sua propriedade, sua medida em acres e o animal exótico que cria.
1.Josué entrou para vida de fazenda mais tarde que o homem que agora cria jacarés, cuja fazenda é menor que a de Josué. 2.A fazenda com 3250 acres foi comprada em 1980. 3.As lhamas são criadas na fazenda comprada logo a seguir à maior fa- zenda. 4.2500 acres é a medida da fazenda onde são criados javalis, que não foi adquirida em 1956. 5.Yago cuida de veados; ele fez sua estréia no mundo das fazendas em uma ano posterior ao que hoje é criador de avestruzes. 6.Tadeu é o dono da fazenda com 3500 acres (que não cria avestruzes).
Recursão 18
nome( fazendeiro( N,,,), N). data( fazendeiro(, D,, ), D). medida( fazendeiro(,, M,), M). animal( fazendeiro(,,, A), A).
membros( X, fazendas( X,,,,)). membros( X, fazendas(, X,,,)). membros( X, fazendas(,, X,,)). membros( X, fazendas(,,, X,)). membros( X, fazendas(,,,, X)).
Uso: SWI ?- resolve(Sol). Sol = fazendas(fazendeiro(josue, 1956, 3600, avestruz), fazendeiro(tadeu, 1949, 3500, jacare), fazendeiro(yago, 1980, 3250, veado), fazendeiro(mariano, 1963, 2750, lhama), fazendeiro(damiao, 1972, 2500, javali)).
PComentário Fizemos uso do predicado == que é verdadeiro sempre que seus argumen- tos não são os mesmos números.
1.3 Recursão
Ex. 10 — (Labirinto) Imagine que a base de conhecimentos seguinte descreva um labirinto. Os fatos determinam quais pontos estão conectados, ou seja, os pontos que se pode alcançar com exatamente um passo. Além disto, imagine que todos os caminhos são ruas de mão única, tal que você somente pode caminhar por elas em uma direção. Assim, você poderá ir do ponto 1 para o ponto 2, mas não poderá ir de 2 para 1.
conectado(1,2). conectado(3,4). conectado(5,6). conectado(7,8). conectado(9,10). conectado(12,13).
Recursão 19
conectado(13,14). conectado(15,16). conectado(17,18). conectado(19,20). conectado(4,1). conectado(6,3). conectado(4,7). conectado(6,11). conectado(14,9). conectado(11,15). conectado(16,12). conectado(14,17). conectado(16,19).
Escreva um predicado caminho/2 que diga até onde se pode chegar par- tindo de um determinado ponto, seguindo as conexões na base de conhe- cimento. Pode-se ir do ponto 5 para o ponto 10? Em quais outros pontos se pode chegar partindo do ponto 1? E quais pontos podem ser alcançados saindo do ponto 13?
Solução:
caminho( X, Y) :− conectado( X, Y). % conexão direta caminho( X, Y) :− conectado( X, Z), % conexão indireta caminho( Z, Y).
Uso: SWI ?- caminho(5,10). true.
?- caminho(1,Y). Y = 2 ; false.
?- caminho(13,Y). Y = 14 ; Y = 9 ; Y = 17 ; Y = 10 ; Y = 18 ;