Questões de Pesquisa
Existem diversas questões interessantes a serem pesquisadas,
envolvendo esse assunto. A mais importante delas é, na nossa
visão, a que trata de estabelecer quais
restrições necessitam ou devem ser impostas, e para que
tipos de funções, de modo a que funções
genéricas possam ser automaticamente derivadas, a partir de
definições existentes, para um determinado tipo de dados
específico. Por exemplo, no caso da função map
descrita acima, seria fácil definir automaticamente usando um
sistema de suporte a polimorfismo de sobrecarga que permita
parametrização sobre construtores de tipos, como o
sistema CT,
há bastante tempo objeto de estudos do autor deste projeto e
seu grupo de pesquisa , uma função map para (digamos)
árvores binárias, a partir da definição
existente para listas. Ou seja, considere, por exemplo, a
definição de um tipo algébrico ("datatype") como
o seguinte, que representa árvores binárias que podem
ser folhas ou nós formados por um elemento e duas
subárvores (à esquerda e à direita do elemento nesse
nó):
| data Tree a = Leaf | Node (Tree a) a (Tree a) |
A definição de map para árvores a seguir:
| map: (a &rarr b) &rarr Tree a &rarr Tree b |
| map f Leaf = Leaf |
| map f (Node t1 a t2) = Node (map f t1) (f a) (map f t2) |
poderia ser obtida a partir da seguinte definição de map
para listas:
| map: (a &rarr b) &rarr [a] &rarr [b] |
| map f [ ] = [ ] |
| map f (a:x) = f a: map f x |
mediante a substituição do construtor sem argumentos [ ],
na definição do tipo lista, pelo correspondente
construtor para o tipo árvore (Leaf), pela aplicação da
função f aos valores do tipo dos elementos da estrutura,
e pela aplicação de map recursivamente (ao valor do tipo
da estrutura de dados).
O objeto de estudo desse projeto é a formalização
de restrições necessárias ou recomendadas para
suporte a derivação automática de
funções politípicas, a partir das
definições de tipos e da definição de uma
função politípica existente para um dos tipos
Outras questões gerais e tópicos novos ou ainda
não estudados em profundidade pela comunidade científica
incluem questões relativas a como implementar linguagens e
prover suporte a linguagens de programação
genérica com suporte a derivação
automática, quais são as vantagens e desvantagens entre
as duas abordagens mencionadas para programação
genérica, como a programação genérica
modifica o uso de métodos para prova de correção
de programas, etc.
É importante mencionar que, nesse contexto, o polimorfismo de
sobrecarga, como definido e implementado no Sistema CT , de
maneira livre e irrestrita, permitindo parametrização de
construtores de dados e restrições de tipos com
vários parâmetros, e sem a necessidade de uso de
dependências funcionais para resolução de sobrecarga e
eliminação de ambigüidades, parece mostrar-se
fundamental.
Carlos Camarao de Figueiredo
Last modified: Mon Jul 19 20:58:31 BRT 2004