Estoy buscando un cálculo simple que admita el razonamiento sobre la reflexión , a saber, la introspección y la manipulación de programas en ejecución.
¿Existe una extensión de cálculo tipo que permita convertir los términos λ en una forma que pueda ser manipulada sintácticamente y luego evaluada?
Me imagino que el cálculo tiene dos términos adicionales principales:
- : toma v y produce una representación de v modificable a la manipulación sintáctica.
- : toma una representación sintáctica de un término y lo evalúa.
Para apoyar la reflexión, se requiere una representación sintáctica de los términos. Se vería algo así como:
- se representaría como un término ( L A M R ( e ) ) , donde R ( e ) es la versión reflejada de e ,
- se representaría como término ( A P P R ( e ) R ( e ' ) ) , y
- se representaría como ( V A R x ) .
Con esta representación, la coincidencia de patrones podría usarse para manipular términos.
Pero nos encontramos con un problema. y e v a l deben codificarse como términos, al igual que la coincidencia de patrones. Tratar con esto parece ser sencillo, agregando R E F L E C T , E V A L y M A T C H , pero ¿tendré que agregar otros términos para respaldar la manipulación de estos?
Hay opciones de diseño que deben hacerse. ¿Qué debe hacer la función aludida anteriormente con el cuerpo de r e f l e c t y e v a l ? ¿Debería R ( - ) transformar el cuerpo o no?
Como no estoy tan interesado en estudiar la reflexión misma, el cálculo serviría como vehículo para otras investigaciones, no quiero reinventar la rueda.
¿Hay algún cálculo existente que coincida con lo que acabo de describir?
Por lo que puedo decir, los cálculos como MetaML, sugeridos en un comentario, son muy útiles, pero no incluyen la capacidad de emparejar patrones y deconstruir fragmentos de código que ya se han construido.
Una cosa que me gustaría poder hacer es lo siguiente:
Y luego realice una coincidencia de patrones en el resultado para construir una expresión completamente diferente.
Ciertamente, esta no es una extensión conservadora del cálculo y es probable que la metateoría sea fea, pero este es el punto para mi aplicación. Quiero separar las abstracciones λ .