Sto cercando un semplice calcolo che supporti il ragionamento sulla riflessione , ovvero l'introspezione e la manipolazione dei programmi in esecuzione.
Esiste un'estensione -calculus non tipizzata che consente di convertire -terms in una forma che può essere sintatticamente manipolata e successivamente valutata?
Immagino che il calcolo abbia due principali termini aggiuntivi:
- v v : prende e produce una rappresentazione di modificabile alla manipolazione sintattica.
- : prende una rappresentazione sintattica di un termine e lo valuta.
Per supportare la riflessione, è richiesta una rappresentazione sintattica dei termini. Sarebbe simile a:
- ( L A M R ( e ) ) R ( e ) e verrebbe rappresentato come un termine , dove è la versione riflessa di ,
- ( A P P R ( e ) R ( e ′ ) ) sarebbe rappresentato come termine , e
- ( V A R x ) verrebbe rappresentato come .
Con questa rappresentazione, la corrispondenza dei modelli potrebbe essere utilizzata per manipolare i termini.
Ma abbiamo un problema. e devono essere codificati come termini, così come la corrispondenza dei pattern. Affrontare questo sembra essere semplice, aggiungendo , e , ma dovrò aggiungere altri termini per supportare la manipolazione di questi?
Ci sono scelte progettuali che devono essere fatte. Cosa dovrebbe fare la funzione sopra menzionata con il corpo di e ? dovrebbe trasformare il corpo o no?
Dato che non sono molto interessato allo studio della riflessione stessa - il calcolo servirebbe da veicolo per altre ricerche - non voglio reinventare la ruota.
Esistono calcoli esistenti che corrispondono a ciò che ho appena descritto?
Per quanto ne so, calcoli come MetaML, suggeriti in un commento, fanno molta strada, ma non includono la possibilità di modellare la corrispondenza e decostruire frammenti di codice che sono già stati creati.
Una cosa che vorrei poter fare è la seguente:
Quindi esegui la corrispondenza del modello sul risultato per creare un'espressione completamente diversa.
Questa non è certamente un'estensione conservativa al -calculus e la meta-teoria sarà probabilmente brutta, ma questo è un po 'il punto per la mia applicazione. Voglio spezzare -struzioni a parte.λ