Я ищу простое исчисление, которое поддерживает рассуждения о рефлексии , а именно, самоанализ и манипулирование запущенными программами.
Есть нетипизированная -исчисления расширения , которое позволяет конвертировать -терминов в форму , которая может быть синтаксический манипулирует , а затем впоследствии оценивается?λ
Я предполагаю, что в исчислении есть два основных дополнительных условия:
- : принимает и создает представление изменить с помощью синтаксических манипуляций.v
- : принимает синтаксическое представление термина и оценивает его.
Чтобы поддержать рефлексию, требуется синтаксическое представление терминов. Это будет выглядеть примерно так:
- будет представлен как термин , где является отраженной версией ,R ( e )
- ( A P P R ( e ) R ( e ′ ) ) будет представлен как термин , и
- ( V A R x ) будет представлен как .
При таком представлении сопоставление с образцом может использоваться для манипулирования терминами.
Но мы сталкиваемся с проблемой. и должны быть закодированы как термины, как и сопоставление с образцом. Разобраться с этим, кажется, просто, добавив , и , но мне нужно будет добавить другие термины для поддержки манипулирования ими?е V л Р Е Р Ь Е С Т Е В Л М Т С Н
Есть выбор дизайна, который должен быть сделан. Что должна делать функция упомянутая выше, с телом и ? Должен ли преобразовывать тело или нет?г е е л е с т е V л R ( - )
Поскольку я не очень заинтересован в изучении самого отражения - исчисление послужит средством для других исследований - я не хочу изобретать велосипед.
Существуют ли какие-либо исчисления, которые соответствуют тому, что я только что описал?
Насколько я могу судить, исчисления, такие как MetaML, предложенные в комментарии, имеют большое значение, но они не включают в себя возможность сопоставления с образцом и деконструкции уже созданных фрагментов кода.
Я хотел бы иметь возможность сделать следующее:
А затем выполните сопоставление с шаблоном для результата, чтобы создать совершенно другое выражение.
Это, конечно, не является консервативным расширением -calculus, и мета-теория, вероятно, будет некрасивой, но это своего рода точка для моего приложения. Я хочу разбить абстракции на части.λ