MC600 - Segundo semestre de 2003 - LISTA 10 ------------------------------------------- 1. Considere o predicado abaixo: sibling(X,Y) :- mother(M,X), mother(M,Y), father(F,X), father(F,Y), X\=Y. Numa execução normal, é possível que o programa tente encontrar outros pares de pais para X, o que é uma perda de tempo, uma vez que cada pessoa só tem um casal de pais (biológicos). Como poderíamos reescrever o predicado de modo a garantir que sempre será avaliado apenas um par de pais para X? 2. Considere a definição abaixo: member(X,[X|_]) :- !. member(X,[_|Y]) :- member(X,Y). Diga qual será a resposta à pergunta ?- member(X,[a,b,c]), member(X,[c,b]). E se removermos o corte da definição? A resposta mudaria? Defina predicados que implementem as seguintes operações sobre conjuntos. (Conjuntos são representados por listas) 3. Insere um elemento numa lista (se ele já não estiver) 4. Faz a união de duas listas. 5. Verifica se uma lista é subconjunto de outra.