Я шукаю просте обчислення, яке підтримує міркування про роздуми , а саме про самоаналіз та маніпулювання запущеними програмами.
Чи існує нетипізоване розширення числення, яке дозволяє перетворити λ -терміни у форму, яку можна синтаксично маніпулювати, а потім оцінювати?
Я думаю, що в обчисленні є два основні додаткові умови:
- : приймає v і створює подання v, придатне для синтаксичної маніпуляції.
- : приймає синтаксичне подання терміна і оцінює його.
Для підтримки рефлексії необхідне синтаксичне подання термінів. Це виглядатиме приблизно так:
- буде представлено як термін ( L A M R ( e ) ) , де R ( e ) - відображена версія e ,
- буде представлено як термін ( A P P R ( e ) R ( e ′ ) ) , і
- буде представлено у вигляді ( V A R x ) .
За допомогою цього подання відповідність шаблонів може використовуватися для маніпулювання термінами.
Але ми стикаємося з проблемою. і e v a l потрібно кодувати як терміни, як і відповідність шаблонів. Справа з цим здається простою, додаючи R E F L E C T , E V A L і M A T C H , але чи потрібно мені додати інші терміни для підтримки маніпулювання ними?
Є вибір дизайну, який потрібно зробити. Що має робити функція про яку говорилося вище, з тілом r e f l e c t і e v a l ? Чи повинен R ( - ) перетворювати тіло чи ні?
Оскільки мене не так цікавить вивчення самої рефлексії - обчислення могло б послужити засобом для інших досліджень - я не хочу винаходити колесо.
Чи існують якісь розрахунки, які відповідають тому, що я щойно описав?
Наскільки я можу сказати, такі калькуляції, як MetaML, запропоновані в коментарі, проходять довгий шлях, але вони не включають можливість складання узгодження та деконструкції фрагментів коду, які вже були побудовані.
Я б хотів зробити це:
А потім виконайте відповідність шаблону за результатом, щоб створити зовсім інший вираз.
Це, звичайно, не є консервативним продовженням -рахунку, і мета-теорія, ймовірно, буде некрасивою, але це є своєрідним моментом для мого застосування. Я хочу розбити λ -абстракції.