Baixe o app para aproveitar ainda mais
Prévia do material em texto
Universidade Federal da Grande Dourados Faculdade de Cieˆncias Exatas e Tecnologias Bacharelado em Sistemas de Informac¸a˜o Paradigmas em Linguagens de Programac¸a˜o Lista de Exerc´ıcios 4 – Prolog Prof. M.Sc. Rodrigo Porf´ırio da Silva Sacchi 1. Fac¸a um programa que encontre o u´ltimo elemento de uma lista. Exem- plo: ?- my last(X,[a,b,c,d]). X = d 2. Fac¸a um programa que encontre o k-e´simo elemento de uma lista. Exemplo: ?- element at(X,[a,b,c,d,e],3). X = c 3. Fac¸a um programa que encontre o nu´mero de elementos em uma lista. 4. Fac¸a um programa que, dada uma lista, retorna ela revertida. 5. A a´rvore genealo´gica da famı´lia Bento. Pouco se sabe da histo´ria passada da famı´lia Bento. Existem alguns registos antigos que indicam que o casal Jose´ e Maria criou dois filhos, o Joa˜o e a Ana. Que a Ana teve duas filhas, a Helena e a Joana, tambe´m parece ser verdade, segundo os mesmos registos. Ale´m disso, o Ma´rio e´ filho do Joa˜o, pois muito se orgulha ele disso. Estranho tambe´m, foi constatar que o Carlos nasceu da relac¸a˜o entre a Helena, muito formosa, e o Ma´rio. Coloque os fatos, regras e predicados em um arquivo chamado bento.pl. (a) Utilizando o predicado progenitor(X,Y) (ou seja, X e´ progeni- tor de Y), represente em Prolog todos os progenitores da famı´lia Bento; 1 (b) Represente em Prolog as relac¸o˜es: sexo (masculino ou feminino), irma˜, irma˜o, descendente, ma˜e (use a func¸a˜o findall), pai, avoˆ, tio (use a func¸a˜o findall), primo (entende-se por ser primo ou prima (use a func¸a˜o findall)). (c) Formule em Prolog as seguintes questo˜es: i. O Joa˜o e´ filho do Jose´? ii. Quem sa˜o os filhos da Maria? iii. Quem sa˜o os primos do Ma´rio? iv. Quantos sobrinhos/sobrinhas com um Tio existem na famı´lia Bento? v. Quem sa˜o os ascendentes do Carlos? vi. A Helena tem irma˜os? E irma˜s? 6. Represente em Prolog os seguintes predicados gene´ricos sobre listas (sem utilizar os correspondentes predicados do mo´dulo lists). Crie um arquivo chamado listas.pl para colocar os fatos, regras e predicados. (a) adiciona(X,L1,L2) – onde L2 e´ a lista que conte´m o elemento X e a lista L1. Teste este predicado no Prolog, executando: ?- adiciona(1,[2,3],L). ?- adiciona(X,[2,3],[1,2,3]). (b) apaga(X,L1,L2) – onde L2 e´ a lista L1 sem o elemento X. Teste com: ?- apaga(a,[a,b,a,c],L). ?- apaga(a,L,[b,c]). (c) membro(X,L) – que e´ verdadeiro se X pertencer a` lista L. Teste com: ?- membro(b,[a,b,c]). ?- membro(X,[a,b,c]). % carregar em ; ?- findall(X,membro(X,[a,b,c]),L). (d) concatena(L1,L2,L3) – onde L3 e´ resultado da junc¸a˜o das listas L2 e L1. Teste com: ?- concatena([1,2],[3,4],L). ?- concatena([1,2],L,[1,2,3,4]). ?- concatena(L,[3,4],[1,2,3,4]). (e) comprimento(X,L) – onde X e´ o nu´mero de elementos da lista L. Teste com: ?- comprimento(X,[a,b,c]). 2 (f) maximo(X,L) – onde X e´ o valor ma´ximo da lista L (assumir que L conte´m somente nu´meros). Teste com: ?- maximo(X,[3,2,1,7,4]). (g) media(X,L) – onde X e´ o valor me´dio da lista L (assumir que L conte´m somente nu´meros). Teste com: ?- media(X,[1,2,3,4,5]). 3
Compartilhar