Lista 2 Prolog (turma B e MC600)

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 nivel.

Questões

  1. Escreva o predicado impares de dois argumentos, que é verdadeiro se o primeiro argumento é uma lista e o segundo uma lista com apenas os elementos em posições impares da primeira lista. (o primeiro elemento da lista esta na posição 1) Modo +,-

    Ex: impares([e, 5, t, w, q, 3, 4],X) satisfa com X = [e, t, q, 4]

    Ex: impares([],X) falha

  2. Escreva o predicado prof_media de tres argumentos, que dado um atomo como primeiro argumento e uma lista (com sublistas, etc) como o segundo argumento, é verdadeiro se o terceiro argumento for a profundidade media do atomo na lista. O predicado deve falhar se o atomo não pertence a lista. Modo +,+,-

    Ex: prof_media(r,[e,[r,[t]],[t,[r]]],X) satisfaz com X = 2.5

    Ex: prof_media(a,[e,[r,[t]],[t,[r]]],X) falha

  3. Vamos assumir que uma matriz é dada por uma lista de listas, por linhas. Assim [[1,2,3],[4,5,6]] representa a matriz 2x3 1 2 3 4 5 6 Escreva o predicado get de 4 argumentos, que dado uma matriz como primeiro argumento, um numero L que representa a linha, um numero C que representa a coluna, sera verdadeiro se o quarto argumento for o L,C elemento da matrix. O predicado deve falhar se não houver o L,C elemento na matriz. Modo +++-

    get([[1,2,3],[4,5,6]],1,3,X) satisfaz com X = 3

    get([[1,2,3],[4,5,6]],3,2,X) falha

  4. Escreva o predicado arvore_rev que dado uma arvore como primeiro argumento, é verdadeiro se o segundo argmento for o reverso da arvore em todos os niveis. Modo +-

    arvore_rev([a, [b, c], [[d, e], f] g],X) satisfaz com X = [g, [f, [e, d]], [c, b], a]