Lista 1 Prolog (turma B)

Instruções

A lista devera ser entregue em um diskette com o seu RA. Todas as questoes da lista devem estar no arquivo lista3.pl. Cada questão pede para voce definir uma função, defina-a com o nome pedido pois a correção será automatica. Voce pode definir suas funcoes auxiliares no arquivo.

Esta lista deverá ser entregue no dia 20/6.

Questões

  1. Num banco de dados Prolog, com os predicados genitor(X,Y) se X é um dos pais biologicos de Y, homem(X) se X é homem, mulher(X) se X é mulher, e casado(X,Y) se X esta casado com Y. Defina os predicados:

  2. Escreva o predicado conta(X,A,N) que é verdadeiro se N é o numero de vezes que o atomo A aprece na lista X e em todas as suas sublistas, subsublistas, etc.

    Ex: conta([[a,b],[c],[c,[e,f],g], [a,c],[f],[c,[],g]] , c, N) é verdadeiro com N = 4.

  3. Escreva o predicado separa(X,IMPAR,PAR) que é verdadeiro se IMPAR é a lista que contem todos os elementos de X nas posições impares (1,3,5 etc), e PAR a lista de todos os elementos de X nas posições pares.

    Ex: separa([a,b,c,d,e] , [a, c, e] , [b,d]) é verdadeiro

  4. Vamos assumir que uma arvore de busca binaria é representada em pela seguinte estrutura

    arv(chave,valor,subarvore-a-esquerda,subarvore-a-direita).

    O simbolo nil representa a arvore vazia

    assim ar(4,a,ar(2,b,ar(1,h,nil,nil),ar(3,c,nil,nil)),ar(7,a,nil,ar(9,g,nil,nil))) representa a arvore:

    4,a / \ 2,b 7,a / \ \ 1,h 3,c 9,g Escreva o predicado inclue(Ch,Val,ARVvelha,ARVnova) que é verdadeiro se ARVnova é o resultado de incluir o item com chave Ch e valor Val na arvore binaria representada por ARVvelha

  5. Dado uma arvore de busca binaria acima, escreva o predicado profund(ARV,N,Lado) que será verdadeiro se N for a profundidade maxima da arvore ARV, e Lado for e se o nó de profundidade maxima estiver na subarvore esquerda da raiz de ARV, e d se estiver na subarvore direita.