Estou procurando um cálculo simples que suporte o raciocínio sobre reflexão , a saber, a introspecção e manipulação de programas em execução.
Existe uma extensão de cálcio não tipada que permita converter termos λ em um formato que possa ser sintaticamente manipulado e depois avaliado posteriormente?
Imagino que o cálculo tenha dois termos adicionais principais:
- : pega ve produz uma representação de v corrigível para manipulação sintática.
- : pega uma representação sintática de um termo e a avalia.
Para apoiar a reflexão, é necessária uma representação sintática dos termos. Seria algo como:
- será portanto representada por um termo ( G A M R ( e ) ) , em que R ( e ) é a versão reflectida de e ,
- seria representado como termo ( A P P R ( e ) R ( e ' ) ) , e
- seria representado como ( V A R x ) .
Com essa representação, a correspondência de padrões pode ser usada para manipular termos.
Mas nos deparamos com um problema. e e v um l necessidade de ser codificada como termos, como o faz a correspondência de padrões. Lidando com isto parece ser simples, adicionando R E F G E C T , E V A G e H A T C H , mas será necessário adicionar outros termos para suportar a manipulação destes?
Existem opções de design que precisam ser feitas. Qual deve ser o função aludido acima fazer com o corpo de r e f l e c t e e v a l ? Should R ( - ) transformar o corpo ou não?
Como não estou muito interessado em estudar a própria reflexão - o cálculo serviria de veículo para outras pesquisas - não quero reinventar a roda.
Existe algum cálculo existente que corresponda ao que acabei de descrever?
Até onde eu sei, cálculos como o MetaML, sugerido em um comentário, percorrem um longo caminho, mas eles não incluem a capacidade de combinar padrões e desconstruir fragmentos de código que já foram criados.
Uma coisa que eu gostaria de poder fazer é o seguinte:
E, em seguida, execute a correspondência de padrões no resultado para criar uma expressão completamente diferente.
Certamente, essa não é uma extensão conservadora do cálcio e a metateoria provavelmente é feia, mas esse é o ponto da minha aplicação. Eu quero separar as λ- distrações.