Я работаю над мета-интерпретатором для фрагмента языка, который должен быть достаточно богатым, чтобы поддерживать функции более высокого порядка, и столкнулся с проблемой замыканий.
В частности, мне нужно, чтобы все значения были представлены в виде конечных терминов; нет бесконечного повторения, нет объектов, указывающих друг на друга. Это нормально для большинства типов значений, чисел, конечных списков, карт, абстрактных синтаксических деревьев, представляющих программный код. Проблема в замыканиях; они содержат ссылку на содержащую их среду, но если замыкание хранится в локальной переменной, то содержащаяся среда также содержит ссылку на замыкание. Это нормально, если вы работаете с изменяемыми указателями, но это бесконечное повторение, если вы пытаетесь работать с конечными терминами.
Существует ли известный метод представления замыканий в виде конечных членов или какой-то метод, который я упускаю, который позволяет обойти проблему?
косвенно, как всегда. использовать метки, поэтому указатель указывает на метку объекта, а не на сам объект.