Sheme
Fundamentos de Programação
Projecto - Primeira Parte 2 de Novembro de 2010
O objectivo da primeira parte do projecto é a definição e implementação de alguns dos tipos abstractos de informação que serão usados na realização do projecto final. Os tipos implementados nesta primeira parte vão ser usados não só pelo programa que desenvolverá na segunda parte, como também por outros programas, nomeadamente o programa de avaliação automática. Assim, deve respeitar escrupulosamente as definições que são dadas de seguida, inclusivamente no que diz respeito aos nomes dos procedimentos, bem como ao número e ordem dos parâmetros formais. Para além dos tipos abaixo descritos, deverá incluir no seu código a implementação do tipo lista simplificada apresentada no livro; não precisa, no entanto, de incluir a definição abstracta do tipo lista simplificada no seu relatório. Para não sobrecarregar desnecessariamente o código, apenas os construtores de cada tipo devem verificar a validade dos argumentos que recebem.
1 O tipo posição
Uma posição é constituída por dois inteiros, entre 0 e 7, correspondentes a uma linha e uma coluna de um tabuleiro de jogo 8×8. O tipo posição deve disponibilizar as seguintes operações básicas: 1. Construtor. • f az-pos : inteiro × inteiro → posic ao ,˜ f az-pos(l, c) devolve a posição correspondente à linha l, coluna c. 2. Selectores. • linha-pos : posic ao → inteiro ,˜ linha-pos(p) devolve a linha da posição p. • coluna-pos : posic ao → inteiro ,˜ coluna-pos(p) devolve a coluna da posição p. 3. Reconhecedor. • pos? : universal → l´gico o pos?(arg) tem o valor verdadeiro, se arg é uma posição, e tem o valor f also, em caso contrário. 4. Teste.
• pos =? : posic ao × posic ao → l´gico o ,˜ ,˜ pos =?(p1 , p2 ) tem o valor verdadeiro, se p1 e p2 são posições iguais, e tem o valor f also, em caso contrário. Devem também ser disponibilizadas as seguintes operações de alto nível:1 • distancia