Lista 2 Prolog (turma A)

Instruções:

Definições:

Uma lista que contem sub listas, e sub-sublistas pode ser vista como uma arvore. A lista [a, [[b, c], d], e] pode ser vista como a árvore

+ 0 / | \ a + e 1 / \ + d 2 / \ b c 3 Nesta lista, chamaremos de uma árvore uma lista que contem sub-listas e subsub-listas.

O número ao lado da arvore é a profundidade do nível.

Questões

  1. Escreva o predicado removenumeros(L1,L2) que é verdadeiro quando L2 contem todos os elementos de L1 que não são números.

    Ex: removenumeros([e, 5, t, w, q, 3.4],X) é verdadeiros com X = [e, t, w, q]

  2. Escreva o predicado profundidade(A,L,N) que é verdadeiro quando A é um átomo e L uma árvore, e N a menor profundidade do átomo na árvore

    Ex: profundidade(r,[e,[r,[t]],[t,[r]]],X) retorna X = 2

  3. Escreva o predicado subarvore(A,SA) que é verdadeiro quando A é uma árvore e SA é alguma sub-árvore da primeira (em alguma profundidade)

    Ex: subarvore([[a,b],[c],[c,[e, f]]], [e, f]) deve ser verdadeiro.

    subarvore([[a, b], [c], [c, [e, f]]],[c, e, f]) falha.

  4. Vamos assumir que uma árvore de busca binária é representada em Prolog da seguinte forma

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

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

    4,a / \ 2,b 7,a / \ \ 1,h 3,c 9,g Escreva o predicado retira(A,CH,NA) que é verdadeiro se dado A é uma arvore binária, CH uma chave (um número), e NA a arvore binária sem o nó que contem tal chave.

    Ex: se a arvore acima é o valor da variável XX então: retira(XX,2,YY) retorna (por exemplo) YY = arv(4,a,arv(1,h, vazia, arv(3, c, vazia, vazia)), arv(7, a, vazia, arv(9, g, vazia, vazia)))