Lista 2 Prolog (turma A)

Instruções

A lista devera ser entregue em um diskette com o seu RA. Todas as questoes da lista devem estar no arquivo lista4.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 1/5.

Questões

  1. Um DAG é representado por uma lista [ arco(a,b), arco(a,d), arco(b,f) ...] onde arco(a,b) representa que existem um arco de a para b. Escreva o predicado sorvedouro(G,L) que é verdadeira se L é a lista de todos os sorvedouros do DAG G, representado da forma acima.

  2. Um DAG é representado por fatos da forma aponta(a,[b,d,g]) que indica que existem arcos de a para b, d e g. Escreva o predicado fontes(L) que é verdadeiro se L é a lista de todas as fontes (verices que nao sao apontados por ninguem) do DAG.

  3. Uma matriz é representada por uma lista de listas onde as listas internas representam as linhas da matriz. Por exemplo [[1,2],[7,8]], representa a matriz 1 2 7 8 Escreva o predicado coluna(M,N,C) que é verdadeiro se C é uma lista que representa a N-esima coluna da matriz M.

  4. Escreva o predicado msort(A,B) que é verdadeiro se B for o resultado ordenar A usando o merge sort. (Como algo interessante compare a velocidade do merge sort com o do quick sort dado em classe).

  5. Suponha que voce tem uma lista da forma [ notas(aluno1,nota1-1,nota1-2,nota1-3), notas(aluno2,nota2-1,nota2-2,nota2-3), ...] onde aluno1 é o nome do aluno, e nota1-1, nota1-2 e nota1-3 são as notas de LISP, Prolog e Java do aluno neste curso. Na media final, Java conta com peso 2.

    Escreva o predicado passou(L,A) que é verdade se L é uma lista acima e A é uma lista com apenas o nome dos alunos que tiraram media >= 5.