Exemplos "teórico-práticos" de
Linguagens de Programação II - 2005/6

Página actualizada às . Comentários para mc@dsi.uminho.pt 

Semana de 13 de Março

Exercício net.1

Olhe para o seguinte exemplo (do Tutorial Java; cópia local do programa aqui). Um "echo server" é um programa que ecoa fielmente a informação que lhe chega.

Semana de 20 de Março

Revisões Java à volta de um programa de "CHAT" (projecto internet). Acerca de testes automáticos.

Semana de 27 de Março

Colorização de mapas

inspirado no exemplo de Pereira e Porto, referido no "PROLOG by Example", de Coelho e Cotta, Springer Verlag 1988, ISBN: 0387183132

Arranjar uma combinação de côres (quatro chegam !) para o seguinte mapa da União Europeia (http://www.geog.fu-berlin.de/eurocis/eu/eu.html):

click for legend

...escrevendo um golo para o seguinte programa que especifica as côres compatíveis entre regiões adjacentes (pista: baptizar as variáveis com os nomes dos países):

compativel(vermelho,verde).
compativel(vermelho,azul).
compativel(vermelho,amarelo).
compativel(verde,azul).
compativel(verde,amarelo).
compativel(azul,amarelo).

vizinho(R1,R2) :- compativel(R1,R2).
vizinho(R1,R2) :- compativel(R2,R1).

Semana de 10 Abril

Computação de derivadas

Escrever um predicado derivada(E,V,D) que determina a derivada D da expressão E em ordem à variável V para as quatro operações aritméticas. Por exemplo:

?- derivada(2*y+x,x,D).
D=1

Uma solução básica e outra com melhorias para simplificação de algumas expressões

Acerca de listas ordenadas

Escrever um predicado ordenada(L) que sucede se a lista de inteiros L estiver ordenada. Por exemplo:

?- ordenada([1,5,9,13]).
Yes

Seguidamente escrever um predicado ordenar(L,O) que dada uma lista L constroi uma lista O com os mesmos elementos ordenados. Neste exercício despreocupe-se com a eficiência: use o predicado permutation/2 (cap.3) e o predicado anterior...

Semana de 24 Abril

Saltos de cavalos (Bratko, 4.7)

Semana de 7 Maio

If-then-else e o cut

Definir um predicado seEntãoSenão(Se,Então,Senão), que simula a construção sintáctica se...então...senão... de outras linguagens. Por exemplo:

?-  NotaPrática=11, NotaTeórica=10, NotaTP=10, seEntãoSenão(NotaPrática<=8.5,Nota='NA',Nota is NotaPrática*0.4+NotaTeórica*0.5+NotaTP*0.1).
Nota = 10.4

Semana de 22 Maio

Sorted list merge (Bratko, 9.5)

Tree linearize (Bratko, 9.11)

Semana de 29 Maio

A caixa de 4 portas e um meta-interpretador que a mostra (Bratko, secção 20.2.2)

Enquanto noutras linguagens é possível ilustrar a execução considerando dois pontos em cada procedimento/função/método - CALL, EXIT - no Prolog há necessidade de considerar mais dois: REDO, quando um golo é atingido em retrocesso à procura de mais soluções; e FAIL, quando um golo esgota as soluções. Os debuggers Prolog costumam mostrar estas 4 portas.

?- itrace(membro(X,[a,b])).
CALLing membro(X,[a,b])
EXITing membro(a,[a,b])
X=a ; % utilizador pede mais soluções
REDOing membro(a,[a,b])
CALLing membro(X,[b])
EXITing membro(b,[b])
EXITing membro(b,[a,b])
X=b ;
REDOing membro(b,[a,b])
REDOing membro(b,[b])
CALLing membro(b,[])
FAILing membro(b,[])
FAILing membro(X,[b])
FAILing membro(X,[a,b])

 

¯kk&