Ich suche nach einem einfachen Kalkül, das die Überlegungen zur Reflexion unterstützt , nämlich die Introspektion und Manipulation von laufenden Programmen.
Gibt es eine untypisierte Kalkulus-Erweiterung, mit der man Terme in eine Form umwandeln kann, die syntaktisch manipuliert und anschließend ausgewertet werden kann?
Ich stelle mir vor, dass der Kalkül zwei zusätzliche Hauptbegriffe hat:
- : nimmt und erzeugt eine Darstellung abänderbar zur syntaktischen Manipulation.
- : Nimmt eine syntaktische Darstellung eines Begriffs und wertet ihn aus.
Zur Unterstützung der Reflexion ist eine syntaktische Darstellung von Begriffen erforderlich. Es würde ungefähr so aussehen:
- würde als ein Term ( L A M R ( e ) ) dargestellt , wobei R ( e ) die reflektierte Version von e ist ,
- würde dargestellt als Term ( A P P R ( e ) R ( e ' ) ) und
- würden dargestellt als ( V A R x ) .
Mit dieser Darstellung könnte der Mustervergleich zum Manipulieren von Begriffen verwendet werden.
Aber wir stoßen auf ein Problem. und e v a l müssen als Terme codiert werden, ebenso wie Pattern Matching. Der Umgang damit scheint unkompliziert zu sein, wenn Sie R E F L E C T , E V A L und M A T C H hinzufügen. Muss ich jedoch andere Begriffe hinzufügen, um die Manipulation dieser zu unterstützen?
Es gibt Designentscheidungen, die getroffen werden müssen. Was soll die oben erwähnte - Funktion mit dem Körper von r e f l e c t und e v a l tun ? Sollte R ( - ) den Körper transformieren oder nicht?
Da ich nicht so sehr daran interessiert bin, Reflexion selbst zu studieren - der Kalkül würde als Vehikel für andere Forschungen dienen - möchte ich das Rad nicht neu erfinden.
Gibt es Kalküle, die mit den oben beschriebenen übereinstimmen?
Soweit ich das beurteilen kann, sind Kalküle wie MetaML, die in einem Kommentar vorgeschlagen wurden, weit fortgeschritten, bieten jedoch nicht die Möglichkeit, bereits erstellte Codefragmente zu strukturieren und zu dekonstruieren.
Eine Sache, die ich tun möchte, ist die folgende:
Führen Sie dann einen Mustervergleich für das Ergebnis durch, um einen völlig anderen Ausdruck zu erstellen.
Dies ist sicherlich keine konservative Erweiterung des Kalküls, und die Metatheorie dürfte hässlich sein, aber dies ist eine Art Punkt für meine Anwendung. Ich möchte λ -Abstraktionen auseinander brechen .